home *** CD-ROM | disk | FTP | other *** search
/ 60 Years Brother 1954 - 2014 / 60thBook.bin / BROTHER 60th CD / Brother_60th_Anniversary_flip book for PC.exe / html5.js < prev    next >
Text File  |  2013-01-07  |  213KB  |  6,236 lines

  1. var $estr = function() { return js.Boot.__string_rec(this,''); };
  2. function $extend(from, fields) {
  3.     function inherit() {}; inherit.prototype = from; var proto = new inherit();
  4.     for (var name in fields) proto[name] = fields[name];
  5.     return proto;
  6. }
  7. var CData = function() {
  8. };
  9. CData.__name__ = true;
  10. CData.prototype = {
  11.     __class__: CData
  12. }
  13. var FlipBook = function() {
  14.     this.bShowBottomBar = true;
  15.     this.bCanGestureZoom = true;
  16.     this.bStartNoteGesture = false;
  17.     this.currentNote = null;
  18.     this.bStartNote = false;
  19.     this.bStartHighLightGesture = false;
  20.     this.currentHighLight = null;
  21.     this.bStartHighLight = false;
  22.     this.gestureLastY = -1;
  23.     this.gestureLastX = -1;
  24.     this.gestureMoveY = 0;
  25.     this.gestureMoveX = 0;
  26.     this.currentMoveY = 0;
  27.     this.currentMoveX = 0;
  28.     this.init_moveY = 0;
  29.     this.init_moveX = 0;
  30.     this.totalLast = 0;
  31.     this.totalDistance = 0;
  32.     this.last_moveY = 0;
  33.     this.last_moveX = 0;
  34.     this.page_offsetY = 0;
  35.     this.page_offsetX = 0;
  36.     this.realScale = 1;
  37.     this.totalGeustureScale = 0;
  38.     this.gestureScale = 1;
  39.     this.startMoveGesture = false;
  40.     this.startFingerDistance = 0;
  41.     this.startZoomGesture = false;
  42.     this.rightPageNum = -1;
  43.     this.leftPageNum = -1;
  44.     this.bookContext = new core.BookContext();
  45.     this.tweener = new core.Tweener();
  46.     this.currentPageNum = 0;
  47.     this.zoomStatus = core.ZoomStatus.normal;
  48. };
  49. FlipBook.__name__ = true;
  50. FlipBook.prototype = {
  51.     f_sort: function(x,y) {
  52.         if(x.pageNum > y.pageNum) return 1;
  53.         if(x.pageNum == y.pageNum) return 0;
  54.         return -1;
  55.     }
  56.     ,onButtonBookmark: function(e) {
  57.         this.stopFlip();
  58.         if(this.currentTopBarButton == this.btnBookMark) {
  59.             this.hideTopBar();
  60.             return;
  61.         }
  62.         this.resetAndShowTopBar("bookmarks");
  63.         this.setTopTitle("BookmarkView");
  64.         this.currentTopBarButton = this.btnBookMark;
  65.         var bookmarks = RunTime.book.bookmarks;
  66.         var lv = !this.checkIfExistBookmark(this.leftPageNum) && this.leftPageNum != -1;
  67.         var rv = !this.checkIfExistBookmark(this.rightPageNum) && this.rightPageNum != -1;
  68.         bookmarks.sort($bind(this,this.f_sort));
  69.         var html = core.HtmlHelper.toBookmarksHtml(bookmarks,RunTime.singlePage,lv,rv);
  70.         if(RunTime.book.rightToLeft) html = core.HtmlHelper.toBookmarksHtml(bookmarks,RunTime.singlePage,rv,lv);
  71.         this.topBarContent.innerHTML = html;
  72.         this.HideBarOnPhone();
  73.     }
  74.     ,resetHighlightButton: function() {
  75.         this.bStartHighLight = false;
  76.         this.btnMask.style.backgroundColor = "";
  77.     }
  78.     ,resetNoteButton: function() {
  79.         this.bStartNote = false;
  80.         this.btnNote.style.backgroundColor = "";
  81.     }
  82.     ,onButtonNoteClick: function(e) {
  83.         this.resetHighlightButton();
  84.         this.bStartNote = !this.bStartNote;
  85.         if(this.bStartNote) this.btnNote.style.backgroundColor = "#ff00ff"; else this.btnNote.style.backgroundColor = "";
  86.         this.HideBarOnPhone();
  87.     }
  88.     ,onButtonMaskClick: function(e) {
  89.         this.resetNoteButton();
  90.         this.bStartHighLight = !this.bStartHighLight;
  91.         if(this.bStartHighLight) this.btnMask.style.backgroundColor = "#ff00ff"; else this.btnMask.style.backgroundColor = "";
  92.         this.HideBarOnPhone();
  93.     }
  94.     ,resetZoom: function() {
  95.         this.startZoomGesture = false;
  96.         this.startFingerDistance = 0;
  97.         this.startMoveGesture = false;
  98.         this.page_offsetX = 0;
  99.         this.page_offsetY = 0;
  100.         this.last_moveX = 0;
  101.         this.last_moveY = 0;
  102.         this.init_moveX = 0;
  103.         this.init_moveY = 0;
  104.     }
  105.     ,updateVideoLayout: function() {
  106.         var list = this.findVideoHtmlDoms();
  107.         var videos = new Array();
  108.         var _g1 = 0, _g = list.length;
  109.         while(_g1 < _g) {
  110.             var i = _g1++;
  111.             var dom = list[i];
  112.             var _g3 = 0, _g2 = RunTime.book.videos.length;
  113.             while(_g3 < _g2) {
  114.                 var j = _g3++;
  115.                 var video = RunTime.book.videos[j];
  116.                 if(video.id == dom.id) video.updateLayout(dom);
  117.             }
  118.         }
  119.     }
  120.     ,findVideoHtmlDoms: function() {
  121.         var list = new Array();
  122.         if(this.cvsVideo != null) {
  123.             var c = this.cvsVideo.childNodes;
  124.             var _g1 = 0, _g = c.length;
  125.             while(_g1 < _g) {
  126.                 var i = _g1++;
  127.                 list.push(c[i]);
  128.             }
  129.         }
  130.         return list;
  131.     }
  132.     ,hackHtmlDom: function(item) {
  133.         item.onclick = $bind(this,this.forbidden);
  134.         item.ontouchstart = $bind(this,this.forbidden);
  135.         item.ontouchmove = $bind(this,this.forbidden);
  136.         item.ontouchend = $bind(this,this.forbidden);
  137.         item.ontouchcancel = $bind(this,this.forbidden);
  138.         item.gestureend = $bind(this,this.forbidden);
  139.         item.gesturestart = $bind(this,this.forbidden);
  140.         item.gesturechange = $bind(this,this.forbidden);
  141.         item.onscroll = $bind(this,this.forbidden);
  142.         item.onmousewheel = $bind(this,this.forbidden);
  143.         item.ondblclick = $bind(this,this.forbidden);
  144.     }
  145.     ,attachVideoTouchEvents: function() {
  146.         var list = this.findVideoHtmlDoms();
  147.         var _g1 = 0, _g = list.length;
  148.         while(_g1 < _g) {
  149.             var i = _g1++;
  150.             var item = list[i];
  151.         }
  152.     }
  153.     ,showPopupAudio: function(item) {
  154.         item.url = item.destination;
  155.         var pageNum = item.pageNum;
  156.         var audio = new core.AudioInfo();
  157.         audio.pageNum = pageNum;
  158.         audio.url = item.destination;
  159.         this.cvsLeftPageBgAudio.innerHTML = "";
  160.         this.cvsLeftPageBgAudio.innerHTML = core.HtmlHelper.toPopupPageAudiosHtml(audio,true);
  161.         var item1 = js.Lib.document.getElementById("cvsLeftPageBgAudio").getElementsByTagName("audio")[0];
  162.         item1.play();
  163.     }
  164.     ,loadCtxNotes: function() {
  165.         var notes = new Array();
  166.         if(RunTime.book != null && RunTime.book.notes != null) {
  167.             var current = 0;
  168.             if(this.currentPageNum != null) current = this.currentPageNum;
  169.             var _g1 = 0, _g = RunTime.book.notes.length;
  170.             while(_g1 < _g) {
  171.                 var i = _g1++;
  172.                 var item = RunTime.book.notes[i];
  173.                 if(item.pageNum == current) notes.push(item);
  174.             }
  175.         }
  176.         this.bookContext.notes = notes;
  177.     }
  178.     ,loadCtxHighLights: function() {
  179.         var highlights = new Array();
  180.         if(RunTime.book != null && RunTime.book.highlights != null) {
  181.             var current = 0;
  182.             if(this.currentPageNum != null) current = this.currentPageNum;
  183.             var _g1 = 0, _g = RunTime.book.highlights.length;
  184.             while(_g1 < _g) {
  185.                 var i = _g1++;
  186.                 var item = RunTime.book.highlights[i];
  187.                 if(item.pageNum == current) highlights.push(item);
  188.             }
  189.         }
  190.         this.bookContext.highlights = highlights;
  191.     }
  192.     ,loadCtxButtons: function() {
  193.         var buttons = new Array();
  194.         if(RunTime.book != null && RunTime.book.buttons != null) {
  195.             var current = 0;
  196.             if(this.currentPageNum != null) current = this.currentPageNum;
  197.             var _g1 = 0, _g = RunTime.book.buttons.length;
  198.             while(_g1 < _g) {
  199.                 var i = _g1++;
  200.                 var item = RunTime.book.buttons[i];
  201.                 if(item.pageNum == current) buttons.push(item); else if(item.layer == "foreground") buttons.push(item);
  202.             }
  203.         }
  204.         this.bookContext.buttons = buttons;
  205.     }
  206.     ,updateAudios: function() {
  207.         var audios = this.getCurrentPageAudios();
  208.         if(audios.left != null || audios.right != null) {
  209.             this.cvsLeftPageBgAudio.innerHTML = core.HtmlHelper.toPopupPageAudiosHtml(audios.left,true);
  210.             this.cvsRightPageBgAudio.innerHTML = core.HtmlHelper.toPopupPageAudiosHtml(audios.right,false);
  211.         } else RunTime.clearBgAudio();
  212.     }
  213.     ,renderVideo: function(item) {
  214.         this.cvsVideo.innerHTML += core.HtmlHelper.toVideoHtml(item);
  215.     }
  216.     ,updateVideos: function() {
  217.         this.loadCtxVideos();
  218.         var videos = this.bookContext.videos;
  219.         if(videos != null) {
  220.             var _g1 = 0, _g = videos.length;
  221.             while(_g1 < _g) {
  222.                 var i = _g1++;
  223.                 var item = videos[i];
  224.                 this.renderVideo(item);
  225.             }
  226.         }
  227.         this.attachVideoTouchEvents();
  228.     }
  229.     ,clearVideos: function() {
  230.         this.cvsVideo.innerHTML = "";
  231.     }
  232.     ,renderSlideshow: function(item) {
  233.         this.cvsSlideshow.innerHTML += core.HtmlHelper.toSlideshow(item);
  234.     }
  235.     ,updateSlideshow: function() {
  236.         var slides = this.bookContext.slideshow;
  237.         if(slides != null) {
  238.             var _g1 = 0, _g = slides.length;
  239.             while(_g1 < _g) {
  240.                 var i = _g1++;
  241.                 var item = slides[i];
  242.                 this.renderSlideshow(item);
  243.                 item.startTweener();
  244.             }
  245.         }
  246.     }
  247.     ,clearSlideshow: function() {
  248.         this.cvsSlideshow.innerHTML = "";
  249.         var slides = this.bookContext.slideshow;
  250.         if(slides != null) {
  251.             var _g1 = 0, _g = slides.length;
  252.             while(_g1 < _g) {
  253.                 var i = _g1++;
  254.                 var item = slides[i];
  255.                 item.stopTweener();
  256.             }
  257.         }
  258.     }
  259.     ,showBottomBar: function(e) {
  260.         this.topMenuBarBg.style.cssText = "opacity:" + RunTime.bottomBarAlpha + ";  -webkit-transition: 0.3s ease-out; ";
  261.         this.bottomBar.style.cssText = "opacity:" + 1 + "; -webkit-transition: 0.3s ease-out; ";
  262.         this.bottomBar.style.display = "inline-block";
  263.         this.bottomBarBg.style.opacity = RunTime.bottomBarAlpha;
  264.         this.topMenuBar.style.display = "inline-block";
  265.         this.bCanGestureZoom = false;
  266.         RunTime.saveBottomBarVisible(true);
  267.         this.bShowBottomBar = true;
  268.     }
  269.     ,getCurrentBBV: function() {
  270.         if(this.bottomBar.style.display == "inline-block") return "1"; else return "0";
  271.     }
  272.     ,hideBottomBar: function(e,animate,atOnce) {
  273.         if(atOnce == null) atOnce = false;
  274.         if(animate == null) animate = true;
  275.         if(e != null) {
  276.             var t = e.target;
  277.             if(t == this.btnAutoFlip || t == this.btnContents || t == this.btnFirstPage || t == this.btnLastPage || t == this.btnNextPage || t == this.btnPrevPage || t == this.btnSearch || t == this.btnThumbs || t == this.tbPage || t == this.imgLogo) return;
  278.         }
  279.         if(atOnce) {
  280.             this.topMenuBarBg.style.cssText = "opacity:0 ; ";
  281.             this.bottomBar.style.cssText = "opacity: 0 ;";
  282.         } else {
  283.             this.topMenuBarBg.style.cssText = "opacity:0 ; -webkit-transition: 0.3s ease-out; ";
  284.             this.bottomBar.style.cssText = "opacity: 0 ; -webkit-transition: 0.3s ease-out; ";
  285.             this.bCanGestureZoom = false;
  286.         }
  287.         if(e != null) this.bShowBottomBar = false;
  288.         RunTime.saveBottomBarVisible(false);
  289.     }
  290.     ,getCurrentPageAudios: function() {
  291.         var audios = RunTime.book.audios;
  292.         var match = { left : null, right : null};
  293.         var pg = this.getCurrentPageNum();
  294.         var _g1 = 0, _g = audios.length;
  295.         while(_g1 < _g) {
  296.             var i = _g1++;
  297.             var item = audios[i];
  298.             if(item.pageNum == pg) match.left = item;
  299.         }
  300.         return match;
  301.     }
  302.     ,getFullText: function(pages) {
  303.         var result = "";
  304.         var pg = this.getCurrentPageNum();
  305.         var _g1 = 0, _g = pages.length;
  306.         while(_g1 < _g) {
  307.             var i = _g1++;
  308.             var item = pages[i];
  309.             if(item.num == pg) {
  310.                 result += "<br />";
  311.                 result += "<br />";
  312.                 result += "==== Page " + Std.string(pg + 1) + " ====";
  313.                 result += "<br />";
  314.                 result += "<br />";
  315.                 result += item.content;
  316.                 result += "<br />";
  317.                 result += "<br />";
  318.                 break;
  319.             }
  320.         }
  321.         result = StringTools.replace(result,"\n","<br />");
  322.         return result;
  323.     }
  324.     ,updateFullTextCore: function(pages) {
  325.         var result = this.getFullText(pages);
  326.         this.topFullTextContent.innerHTML = result;
  327.         this.topFullTextContent.scrollTop = 0;
  328.     }
  329.     ,updateFullText: function() {
  330.         RunTime.invokePageContentsAction($bind(this,this.updateFullTextCore));
  331.     }
  332.     ,showTxtCore: function(pages) {
  333.         var result = this.getFullText(pages);
  334.         this.resetAndShowTopBar("text");
  335.         this.setTopTitle("FullText");
  336.         this.currentTopBarButton = this.btnShowTxt;
  337.         this.topFullTextContent.innerHTML = result;
  338.         this.topFullTextContent.scrollTop = 0;
  339.     }
  340.     ,onShowTxtClick: function(e) {
  341.         this.stopFlip();
  342.         if(this.currentTopBarButton == this.btnShowTxt) {
  343.             this.hideTopBar();
  344.             return;
  345.         }
  346.         this.HideBarOnPhone();
  347.         RunTime.invokePageContentsAction($bind(this,this.showTxtCore));
  348.     }
  349.     ,onZoomClick: function(e) {
  350.         this.zoomAt(null,null);
  351.     }
  352.     ,onAutoFlipClick: function(e) {
  353.         if(this.zoomLeftPage.src != "") {
  354.             this.zoomLeftPage.src = "";
  355.             this.zoomLeftPage.style.display = "none";
  356.         }
  357.         if(this.zoomRightPage.src != "") {
  358.             this.zoomRightPage.src = "";
  359.             this.zoomRightPage.style.display = "none";
  360.         }
  361.         this.stopFlip(false);
  362.         this.hideTopBar();
  363.         if(this.isAutoFliping == true) {
  364.             this.isAutoFliping = false;
  365.             this.btnAutoFlip.style.opacity = 1;
  366.         } else {
  367.             this.isAutoFliping = true;
  368.             this.btnAutoFlip.style.opacity = RunTime.autoflipButtonUnselectedAlpha;
  369.             this.flipTweener = new core.Tweener();
  370.             var self = this;
  371.             var countOfClip = 50 * RunTime.book.autoFlipSecond;
  372.             this.flipTweener.onChange = function(count) {
  373.                 if(count % countOfClip != 0) return;
  374.                 if(self.isAutoFliping == false) return;
  375.                 if(self.canTurnRight() == true) {
  376.                     if(RunTime.book.rightToLeft) self.turnPage(-1); else self.turnPage(1);
  377.                 } else self.stopFlip();
  378.             };
  379.             this.flipTweener.start(1000000);
  380.         }
  381.     }
  382.     ,canTurnRight: function() {
  383.         var num = this.getCurrentPageNum();
  384.         return num < RunTime.book.pages.length - 1;
  385.     }
  386.     ,preloadPages: function(num) {
  387.         if(RunTime.enablePreload == false) return;
  388.         RunTime.book.preloadPages(num);
  389.     }
  390.     ,stopFlip: function(resetFlipFlag) {
  391.         if(resetFlipFlag == null) resetFlipFlag = true;
  392.         if(this.flipTweener != null) {
  393.             this.flipTweener.onChange = null;
  394.             this.flipTweener.stop();
  395.             this.flipTweener = null;
  396.         }
  397.         if(resetFlipFlag == true) {
  398.             this.isAutoFliping = false;
  399.             this.btnAutoFlip.style.opacity = 1;
  400.         }
  401.     }
  402.     ,checkIfExistBookmark: function(pageNum) {
  403.         var i = 0;
  404.         var _g1 = 0, _g = RunTime.book.bookmarks.length;
  405.         while(_g1 < _g) {
  406.             var i1 = _g1++;
  407.             if(pageNum == RunTime.book.bookmarks[i1].pageNum) return true;
  408.         }
  409.         return false;
  410.     }
  411.     ,addBookmark: function(layout,text) {
  412.         if(layout == null) layout = 0;
  413.         var bookmark = new core.Bookmark();
  414.         if(layout == -1) {
  415.             if(RunTime.book.rightToLeft) bookmark.pageNum = this.rightPageNum; else bookmark.pageNum = this.leftPageNum;
  416.         } else if(layout == 1) {
  417.             if(RunTime.book.rightToLeft) bookmark.pageNum = this.leftPageNum; else bookmark.pageNum = this.rightPageNum;
  418.         } else if(layout == 0) bookmark.pageNum = this.getCurrentPageNum() + 1;
  419.         bookmark.text = text;
  420.         bookmark.save();
  421.         RunTime.book.bookmarks.push(bookmark.clone());
  422.         var bookmarks = RunTime.book.bookmarks;
  423.         var lv = !this.checkIfExistBookmark(this.leftPageNum) && this.leftPageNum != -1;
  424.         var rv = !this.checkIfExistBookmark(this.rightPageNum) && this.rightPageNum != -1;
  425.         var html = core.HtmlHelper.toBookmarksHtml(bookmarks,RunTime.singlePage,lv,rv);
  426.         if(RunTime.book.rightToLeft) html = core.HtmlHelper.toBookmarksHtml(bookmarks,RunTime.singlePage,rv,lv);
  427.         this.topBarContent.innerHTML = html;
  428.     }
  429.     ,removeBookmark: function(pageNum) {
  430.         var i = 0;
  431.         var tmp = new Array();
  432.         var currentBookmark = null;
  433.         var _g1 = 0, _g = RunTime.book.bookmarks.length;
  434.         while(_g1 < _g) {
  435.             var i1 = _g1++;
  436.             haxe.Log.trace(RunTime.book.bookmarks[i1].pageNum,{ fileName : "FlipBook.hx", lineNumber : 1546, className : "FlipBook", methodName : "removeBookmark"});
  437.             if(pageNum + 1 != RunTime.book.bookmarks[i1].pageNum) tmp.push(RunTime.book.bookmarks[i1]); else currentBookmark = RunTime.book.bookmarks[i1];
  438.         }
  439.         if(currentBookmark != null) currentBookmark.remove();
  440.         RunTime.book.bookmarks = tmp;
  441.         var bookmarks = RunTime.book.bookmarks;
  442.         var lv = !this.checkIfExistBookmark(this.leftPageNum) && this.leftPageNum != -1;
  443.         var rv = !this.checkIfExistBookmark(this.rightPageNum) && this.rightPageNum != -1;
  444.         var html = core.HtmlHelper.toBookmarksHtml(bookmarks,RunTime.singlePage,lv,rv);
  445.         if(RunTime.book.rightToLeft) html = core.HtmlHelper.toBookmarksHtml(bookmarks,RunTime.singlePage,rv,lv);
  446.         this.topBarContent.innerHTML = html;
  447.     }
  448.     ,getCurrentPageNum: function() {
  449.         var num = 0;
  450.         if(this.currentPageNum != null) num = this.currentPageNum;
  451.         return num;
  452.     }
  453.     ,searchInPages: function(pages) {
  454.         var results = [];
  455.         var _g1 = 0, _g = pages.length;
  456.         while(_g1 < _g) {
  457.             var i = _g1++;
  458.             var item = pages[i];
  459.             if(item.content == null || item.content == "") continue;
  460.             if(item.contentLowerCase == null) item.contentLowerCase = item.content.toLowerCase();
  461.             var posList = orc.utils.Util.searchPos(item.contentLowerCase,this.searchWord);
  462.             results = results.concat(orc.utils.Util.createSearchResults(item.content,this.searchWord,posList,Std.parseInt(item.id)));
  463.         }
  464.         return results;
  465.     }
  466.     ,searchCore: function(pages) {
  467.         if(this.searchWord == "") return;
  468.         var list = this.searchInPages(pages);
  469.         var dom = this.topBarContent;
  470.         var resultsDom = dom.getElementsByTagName("div")[1];
  471.         if(list == null || list.length == 0) resultsDom.innerHTML = "0 " + L.s("SearchResults","Search Results") + "."; else resultsDom.innerHTML = core.HtmlHelper.toSearchResultHtml(list);
  472.     }
  473.     ,getSearchInputDom: function() {
  474.         var dom = this.topBarContent;
  475.         var inputDom = dom.getElementsByTagName("input")[0];
  476.         return inputDom;
  477.     }
  478.     ,unlockPage: function() {
  479.         var dom = this.cvsOthers;
  480.         var inputDom = dom.getElementsByTagName("input")[0];
  481.         var word = inputDom.value;
  482.         word = StringTools.trim(word);
  483.         RunTime.tryUnlock(word);
  484.     }
  485.     ,inputPwd: function() {
  486.         var dom = this.cvsOthers;
  487.         var inputDom = dom.getElementsByTagName("input")[0];
  488.         var word = inputDom.value;
  489.         word = StringTools.trim(word);
  490.         RunTime.tryPwd(word);
  491.     }
  492.     ,search: function() {
  493.         var input = this.getSearchInputDom();
  494.         var word = input.value;
  495.         word = StringTools.trim(word);
  496.         if(word == "") return;
  497.         this.searchWord = word.toLowerCase();
  498.         RunTime.requestSearch($bind(this,this.searchCore));
  499.         RunTime.logSearch(this.searchWord);
  500.     }
  501.     ,onTbPageFocus: function(e) {
  502.         this.stopFlip();
  503.         var obj = this.tbPage;
  504.         obj.value = "";
  505.     }
  506.     ,onSearchClick: function(e) {
  507.         this.stopFlip();
  508.         if(this.currentTopBarButton == this.btnSearch) {
  509.             this.hideTopBar();
  510.             return;
  511.         }
  512.         this.resetAndShowTopBar("search");
  513.         this.setTopTitle("Search");
  514.         this.currentTopBarButton = this.btnSearch;
  515.         var html = core.HtmlHelper.toSearchHtml();
  516.         this.topBarContent.innerHTML = html;
  517.         this.HideBarOnPhone();
  518.     }
  519.     ,onThumbsClick: function(e) {
  520.         this.stopFlip();
  521.         if(this.currentTopBarButton == this.btnThumbs) {
  522.             this.hideTopBar();
  523.             return;
  524.         }
  525.         this.resetAndShowTopBar("thumbs");
  526.         this.setTopTitle("ThumbnailView");
  527.         this.currentTopBarButton = this.btnThumbs;
  528.         var html = core.HtmlHelper.toThumbsHtml(RunTime.book.pages);
  529.         this.topBarContent.innerHTML = html;
  530.         this.HideBarOnPhone();
  531.     }
  532.     ,HideBarOnPhone: function() {
  533.         var hide = false;
  534.         if(RunTime.clientWidth < 600) hide = true;
  535.         if(js.Lib.window.navigator.userAgent.indexOf("iPhone") != -1) hide = true;
  536.         if(hide) this.hideBottomBar();
  537.     }
  538.     ,onContentsClick: function(e) {
  539.         this.stopFlip();
  540.         if(this.currentTopBarButton == this.btnContents) {
  541.             this.hideTopBar();
  542.             return;
  543.         }
  544.         this.resetAndShowTopBar("toc");
  545.         this.currentTopBarButton = this.btnContents;
  546.         this.setTopTitle("TableOfContents");
  547.         if(RunTime.contentInfo != null) {
  548.             var html = core.HtmlHelper.toContentsHtml(RunTime.contentInfo);
  549.             this.topBarContent.innerHTML = html;
  550.         }
  551.         this.HideBarOnPhone();
  552.     }
  553.     ,onSnsClick: function(e) {
  554.         this.stopFlip();
  555.         if(this.currentTopBarButton == this.btnSns) {
  556.             this.hideTopBar();
  557.             return;
  558.         }
  559.         this.resetAndShowTopBar("sns");
  560.         this.currentTopBarButton = this.btnSns;
  561.         this.setTopTitle("ShareOnSocialNetwork");
  562.         if(RunTime.contentInfo != null) {
  563.             var html = core.HtmlHelper.toSnsHtml(RunTime.shareInfo);
  564.             this.topBarContent.innerHTML = html;
  565.         }
  566.         this.HideBarOnPhone();
  567.     }
  568.     ,onEmailClick: function(e) {
  569.         this.stopFlip();
  570.         if(this.currentTopBarButton == this.btnEmail) {
  571.             this.hideTopBar();
  572.             return;
  573.         }
  574.         this.resetAndShowTopBar("email");
  575.         this.currentTopBarButton = this.btnEmail;
  576.         this.setTopTitle("ShareThisFlipBook");
  577.         if(RunTime.contentInfo != null) {
  578.             var html = core.HtmlHelper.toEmailHtml();
  579.             this.topBarContent.innerHTML = html;
  580.         }
  581.         this.HideBarOnPhone();
  582.     }
  583.     ,focusSearchInput: function() {
  584.         var t = new core.Tweener();
  585.         var self = this;
  586.         t.start(10);
  587.         t.onChange = function(count) {
  588.             if(count == 10) {
  589.                 var input = self.getSearchInputDom();
  590.                 input.focus();
  591.             }
  592.         };
  593.     }
  594.     ,resetAndShowTopBar: function(type) {
  595.         if(type == null) type = "";
  596.         this.resetNoteButton();
  597.         this.resetHighlightButton();
  598.         var dom = this.topBar;
  599.         dom.style.height = "0px";
  600.         var step = 30;
  601.         var height = 300;
  602.         this.setVisible(this.topBarContent,false);
  603.         this.setVisible(this.topFullTextContent,false);
  604.         if(type == "text") {
  605.             HtmlDomHelper.setTopBarMaxSize(dom);
  606.             HtmlDomHelper.setTopFullTextContentMaxSize(this.topFullTextContent);
  607.             height = RunTime.clientHeight - 45 | 0;
  608.             step = step / 10 | 0;
  609.         } else HtmlDomHelper.setTopBarDefaultSize(dom);
  610.         var t = new core.Tweener();
  611.         var self = this;
  612.         self.setVisible(self.topBarContent,false);
  613.         t.start(10);
  614.         t.onChange = function(count) {
  615.             if(count < 10) dom.style.height = Std.string(count * step) + "px"; else {
  616.                 dom.style.height = Std.string(height) + "px";
  617.                 if(type == "text") self.setVisible(self.topFullTextContent,true); else self.setVisible(self.topBarContent,true);
  618.                 if(type == "search") self.focusSearchInput();
  619.             }
  620.         };
  621.         this.setVisible(this.topBar,true);
  622.         this.topBarContent.innerHTML = "";
  623.     }
  624.     ,setTopTitle: function(val) {
  625.         var dom = js.Lib.document.getElementById("topTitle");
  626.         dom.innerHTML = L.s(val);
  627.     }
  628.     ,setVisible: function(dom,val) {
  629.         if(val == true) dom.style.display = "inline"; else dom.style.display = "none";
  630.     }
  631.     ,hideTopBar: function() {
  632.         this.setVisible(this.topBar,false);
  633.         this.currentTopBarButton = null;
  634.     }
  635.     ,loadCtxVideos: function() {
  636.         var videos = new Array();
  637.         if(RunTime.book != null && RunTime.book.videos != null) {
  638.             var current = 0;
  639.             if(this.currentPageNum != null) current = this.currentPageNum;
  640.             var _g1 = 0, _g = RunTime.book.videos.length;
  641.             while(_g1 < _g) {
  642.                 var i = _g1++;
  643.                 var item = RunTime.book.videos[i];
  644.                 if(item.pageNum == current) videos.push(item);
  645.             }
  646.         }
  647.         this.bookContext.videos = videos;
  648.     }
  649.     ,loadCtxHotlinks: function() {
  650.         var links = new Array();
  651.         if(RunTime.book != null && RunTime.book.hotlinks != null) {
  652.             var current = 0;
  653.             if(this.currentPageNum != null) current = this.currentPageNum;
  654.             var _g1 = 0, _g = RunTime.book.hotlinks.length;
  655.             while(_g1 < _g) {
  656.                 var i = _g1++;
  657.                 var item = RunTime.book.hotlinks[i];
  658.                 if(item.pageNum == current) links.push(item);
  659.             }
  660.         }
  661.         this.bookContext.hotlinks = links;
  662.     }
  663.     ,loadCtxSlideshow: function() {
  664.         var slides = new Array();
  665.         if(RunTime.book != null && RunTime.book.slideshows != null) {
  666.             var current = 0;
  667.             if(this.currentPageNum != null) current = this.currentPageNum;
  668.             var _g1 = 0, _g = RunTime.book.slideshows.length;
  669.             while(_g1 < _g) {
  670.                 var i = _g1++;
  671.                 var item = RunTime.book.slideshows[i];
  672.                 if(item.pageNum == current) slides.push(item);
  673.             }
  674.         }
  675.         this.bookContext.slideshow = slides;
  676.         this.updateSlideshow();
  677.     }
  678.     ,clearCtxNote: function() {
  679.         this.bookContext.notes = null;
  680.     }
  681.     ,clearCtxHighLight: function() {
  682.         this.bookContext.highlights = null;
  683.     }
  684.     ,clearCtxButtons: function() {
  685.         this.bookContext.buttons = null;
  686.     }
  687.     ,clearCtxHotlinks: function() {
  688.         this.bookContext.hotlinks = null;
  689.     }
  690.     ,onTopBarTouchMove: function(e) {
  691.         e.preventDefault();
  692.         var obj = e;
  693.         var touch = obj.touches.item(0);
  694.         var offset = this.touchTopBarY - touch.pageY;
  695.         this.topBarContent.scrollTop += Math.round(offset) | 0;
  696.         this.topFullTextContent.scrollTop += Math.round(offset) | 0;
  697.     }
  698.     ,onTopBarTouchEnd: function(e) {
  699.         this.touchTopBarActive = false;
  700.     }
  701.     ,onTopBarTouchStart: function(e) {
  702.         this.touchTopBarActive = true;
  703.         var obj = e;
  704.         var touch = obj.touches.item(0);
  705.         this.touchTopBarY = touch.pageY;
  706.     }
  707.     ,onGestureEnd: function(e) {
  708.         e.stopPropagation();
  709.     }
  710.     ,onGestureChange: function(e) {
  711.         e.stopPropagation();
  712.     }
  713.     ,onGestureStart: function(e) {
  714.         e.stopPropagation();
  715.     }
  716.     ,move: function(offsetX,offsetY) {
  717.         this.bookContext.offsetX += offsetX;
  718.         this.bookContext.offsetY += offsetY;
  719.         this.updateVideoLayout();
  720.         this.bookContext.render();
  721.     }
  722.     ,onTouchMove: function(e) {
  723.         if(RunTime.isPopupModal()) return;
  724.         if(this.bStartHighLight) {
  725.             e.preventDefault();
  726.             var obj = e;
  727.             var touch = obj.touches[0];
  728.             this.gestureLastX = touch.pageX;
  729.             this.gestureLastY = touch.pageY;
  730.             if(Math.abs(this.gestureLastX - this.currentHighLight.tx) <= 10 || Math.abs(this.gestureLastY - this.currentHighLight.ty) <= 10) return;
  731.             this.currentHighLight.twidth = this.gestureLastX - this.currentHighLight.tx;
  732.             this.currentHighLight.theight = this.gestureLastY - this.currentHighLight.ty;
  733.             this.getHighLightContext().clearRect(0,0,js.Lib.window.document.body.clientWidth,js.Lib.window.document.body.clientHeight);
  734.             this.bookContext.render();
  735.             this.currentHighLight.draw(this.getHighLightContext());
  736.             return;
  737.         }
  738.         if(this.bStartNote) {
  739.             e.preventDefault();
  740.             var obj = e;
  741.             var touch = obj.touches[0];
  742.             this.gestureLastX = touch.pageX;
  743.             this.gestureLastY = touch.pageY;
  744.             this.currentNote.twidth = 32;
  745.             this.currentNote.theight = 32;
  746.             this.getNoteContext().clearRect(0,0,js.Lib.window.document.body.clientWidth,js.Lib.window.document.body.clientHeight);
  747.             this.bookContext.render();
  748.             this.currentNote.draw(this.getNoteContext());
  749.             return;
  750.         }
  751.         var obj = e;
  752.         var touch = obj.touches[0];
  753.         var touch2 = obj.touches[1];
  754.         var date = new Date();
  755.         var offsetX = touch.clientX - this.touchStartX;
  756.         var offsetY = touch.clientY - this.touchStartY;
  757.         if(!this.checkCanZoom() && obj.touches.length == 2) obj.preventDefault();
  758.         if(obj.touches.length == 2 && this.checkCanZoom()) {
  759.             this.zoomAt(touch,touch2);
  760.             return;
  761.         }
  762.         if(obj.touches.length == 1 && Math.abs(js.Lib.window.innerWidth - RunTime.clientWidth) < 10) {
  763.             this.zoomLeftPage.src = "";
  764.             this.zoomLeftPage.style.display = "none";
  765.             this.zoomRightPage.src = "";
  766.             this.zoomRightPage.style.display = "none";
  767.             if(offsetX > 0) {
  768.                 this.turnToPrevPage(null);
  769.                 this.touchActive = false;
  770.             } else if(offsetX < 0) {
  771.                 this.turnToNextPage(null);
  772.                 this.touchActive = false;
  773.             }
  774.             this.zoomAt(null,null);
  775.             obj.preventDefault();
  776.         }
  777.         this.lastTouchX = touch.clientX;
  778.         this.lastTouchY = touch.clientY;
  779.     }
  780.     ,checkCanZoom: function() {
  781.         var num = 0;
  782.         if(this.currentPageNum != null) num = this.currentPageNum;
  783.         var page = RunTime.getPage(num);
  784.         return page.canZoom;
  785.     }
  786.     ,onTouchEnd: function(e) {
  787.         if(this.bStartHighLight && this.gestureLastX != -1 && this.gestureLastY != -1) {
  788.             var obj = e;
  789.             e.preventDefault();
  790.             if(this.gestureLastX < this.currentHighLight.tx) {
  791.                 this.currentHighLight.tx = this.gestureLastX;
  792.                 this.currentHighLight.twidth = Math.abs(this.currentHighLight.twidth);
  793.             }
  794.             if(this.gestureLastY < this.currentHighLight.ty) {
  795.                 this.currentHighLight.ty = this.gestureLastY;
  796.                 this.currentHighLight.theight = Math.abs(this.currentHighLight.theight);
  797.             }
  798.             this.currentHighLight.save();
  799.             RunTime.book.highlights.push(this.currentHighLight.clone());
  800.             this.loadCtxHighLights();
  801.             this.bookContext.render();
  802.             this.gestureLastX = -1;
  803.             this.gestureLastY = -1;
  804.             this.currentHighLight.tx = 0;
  805.             this.currentHighLight.ty = 0;
  806.             this.currentHighLight.twidth = 0;
  807.             this.currentHighLight.theight = 0;
  808.             this.currentHighLight.tpageNum = this.getCurrentPageNum();
  809.             this.onButtonMaskClick(null);
  810.             return;
  811.         }
  812.         if(this.bStartNote && this.gestureLastX != -1 && this.gestureLastY != -1) {
  813.             var obj = e;
  814.             e.preventDefault();
  815.             this.currentNote.twidth = 32;
  816.             this.currentNote.theight = 32;
  817.             this.currentNote.save();
  818.             var saveObj = this.currentNote.clone();
  819.             RunTime.book.notes.push(saveObj);
  820.             this.loadCtxNotes();
  821.             this.bookContext.render();
  822.             this.gestureLastX = -1;
  823.             this.gestureLastY = -1;
  824.             this.currentNote.tx = 0;
  825.             this.currentNote.ty = 0;
  826.             this.currentNote.twidth = 0;
  827.             this.currentNote.theight = 0;
  828.             this.currentNote.tpageNum = this.getCurrentPageNum();
  829.             this.onButtonNoteClick(null);
  830.             RunTime.currentNote = saveObj;
  831.             RunTime.currentNote.click();
  832.             return;
  833.         }
  834.         this.totalDistance += this.totalLast;
  835.         if(this.startZoomGesture) {
  836.             if(Math.abs(js.Lib.window.innerWidth - RunTime.clientWidth) >= 10) this.hideBottomBar(); else if(this.bShowBottomBar) this.showBottomBar(null);
  837.         }
  838.         if(this.totalDistance <= 0) {
  839.         }
  840.         e.stopPropagation();
  841.         this.touchActive = false;
  842.         this.startZoomGesture = false;
  843.         this.startFingerDistance = 0;
  844.         return;
  845.     }
  846.     ,getFullUrl: function() {
  847.         return RunTime.urlIndex + "?page=" + Std.string(this.currentPageNum) + "&bbv=" + this.getCurrentBBV() + "&pcode=" + RunTime.pcode;
  848.     }
  849.     ,resizeContainer: function(w,h,l,t) {
  850.     }
  851.     ,getDistance: function(touch1,touch2) {
  852.         var x1 = touch1.clientX;
  853.         var x2 = touch2.clientX;
  854.         var y1 = touch1.clientY;
  855.         var y2 = touch2.clientY;
  856.         return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
  857.     }
  858.     ,zoomIn: function(page,point0,point1) {
  859.         if(page == null) return;
  860.         if(!page.locked) this.zoomLeftPage.src = page.getBigPageUrl(); else {
  861.         }
  862.         this.zoomLeftPage.style.display = "inline";
  863.     }
  864.     ,zoomOut: function() {
  865.         if(this.bShowBottomBar) this.showBottomBar(null);
  866.     }
  867.     ,zoomAt: function(point0,point1) {
  868.         var num = 0;
  869.         if(this.currentPageNum != null) num = this.currentPageNum;
  870.         var page = RunTime.getPage(num);
  871.         if(point0 == null || point1 == null) this.zoomOut(); else this.zoomIn(page,point0,point1);
  872.     }
  873.     ,fillImg: function(urlPage) {
  874.         this.zoomLeftPage.src = urlPage;
  875.     }
  876.     ,onTouchStart: function(e) {
  877.         var obj = e;
  878.         var touch = obj.touches[0];
  879.         if(this.onHighLightClick(touch.pageX,touch.pageY)) return;
  880.         if(this.onNoteClick(touch.pageX,touch.pageY)) return;
  881.         if(this.bStartHighLight) {
  882.             this.currentHighLight = new core.HighLight();
  883.             this.currentHighLight.tx = touch.pageX;
  884.             this.currentHighLight.ty = touch.pageY;
  885.             if(RunTime.singlePage) this.currentHighLight.tpageNum = this.getCurrentPageNum(); else if(RunTime.book.rightToLeft) {
  886.                 if(this.currentHighLight.tx > RunTime.clientWidth / 2) this.currentHighLight.tpageNum = this.leftPageNum - 1; else this.currentHighLight.tpageNum = this.rightPageNum - 1;
  887.             } else if(this.currentHighLight.tx > RunTime.clientWidth / 2) this.currentHighLight.tpageNum = this.rightPageNum - 1; else this.currentHighLight.tpageNum = this.leftPageNum - 1;
  888.             return;
  889.         }
  890.         if(this.bStartNote) {
  891.             this.currentNote = new core.NoteIcon();
  892.             this.currentNote.tx = touch.pageX;
  893.             this.currentNote.ty = touch.pageY;
  894.             this.gestureLastX = touch.pageX;
  895.             this.gestureLastY = touch.pageY;
  896.             if(RunTime.singlePage) this.currentNote.tpageNum = this.getCurrentPageNum(); else if(RunTime.book.rightToLeft) {
  897.                 if(this.currentNote.tx > RunTime.clientWidth / 2) this.currentNote.tpageNum = this.leftPageNum - 1; else this.currentNote.tpageNum = this.rightPageNum - 1;
  898.             } else if(this.currentNote.tx > RunTime.clientWidth / 2) this.currentNote.tpageNum = this.rightPageNum - 1; else this.currentNote.tpageNum = this.leftPageNum - 1;
  899.             return;
  900.         }
  901.         var date = new Date();
  902.         if(obj.touches.length == 2) this.startZoomGesture = true;
  903.         if(this.lastTouchTime != null && obj.touches.length == 1) {
  904.             var lastTime = this.lastTouchTime.getTime();
  905.             var newTime = date.getTime();
  906.             if(newTime - lastTime < RunTime.doubleClickIntervalMs) {
  907.                 this.zoomAt(0,0);
  908.                 this.lastTouchTime = null;
  909.                 if(this.zoomStatus == core.ZoomStatus.zoomed) {
  910.                 } else {
  911.                 }
  912.                 return;
  913.             }
  914.         }
  915.         this.lastTouchTime = date;
  916.         this.stopFlip();
  917.         this.touchActive = true;
  918.         if(this.zoomStatus == core.ZoomStatus.zoomed) this.touchActive = false;
  919.         this.onButtonLinkClick(touch.pageX,touch.pageY);
  920.         this.touchStartX = touch.clientX;
  921.         this.touchStartY = touch.clientY;
  922.         this.lastTouchX = this.touchStartX;
  923.         this.lastTouchY = this.touchStartY;
  924.     }
  925.     ,onMouseMove: function(e) {
  926.         e.stopPropagation();
  927.         if(this.zoomStatus == core.ZoomStatus.zoomed) {
  928.         }
  929.     }
  930.     ,onDblClick: function(e) {
  931.         e.stopPropagation();
  932.     }
  933.     ,setCurrentPage: function(val) {
  934.         var t = this.tbPage;
  935.         t.value = Std.string(val);
  936.     }
  937.     ,setPageCount: function(val) {
  938.         this.tbPageCount.innerHTML = "/ " + Std.string(val);
  939.     }
  940.     ,onEnterPage: function() {
  941.         this.updateFullText();
  942.         this.updateAudios();
  943.     }
  944.     ,TansRightToLeft: function() {
  945.         this.turnToPage(RunTime.book.pages.length - 1);
  946.     }
  947.     ,turnToLastPage: function(e) {
  948.         this.clearZoom();
  949.         this.stopFlip();
  950.         if(RunTime.book.rightToLeft) this.turnToPage(0); else this.turnToPage(RunTime.book.pages.length - 1);
  951.     }
  952.     ,turnToFirstPage: function(e) {
  953.         this.clearZoom();
  954.         this.stopFlip();
  955.         if(RunTime.book.rightToLeft) this.turnToPage(RunTime.book.pages.length - 1); else this.turnToPage(0);
  956.     }
  957.     ,turnToPrevPage: function(e) {
  958.         this.clearZoom();
  959.         this.stopFlip();
  960.         this.turnPage(-1);
  961.     }
  962.     ,clearZoom: function() {
  963.         if(this.zoomLeftPage.src != "") {
  964.             this.zoomLeftPage.src = "";
  965.             this.zoomLeftPage.style.display = "none";
  966.         }
  967.         if(this.zoomRightPage.src != "") {
  968.             this.zoomRightPage.src = "";
  969.             this.zoomRightPage.style.display = "none";
  970.         }
  971.         RunTime.clearPopupContents();
  972.         this.resetNoteButton();
  973.         this.resetHighlightButton();
  974.     }
  975.     ,turnToNextPage: function(e) {
  976.         this.clearZoom();
  977.         this.stopFlip();
  978.         this.turnPage(1);
  979.     }
  980.     ,turnToPage: function(pageNum) {
  981.         this.clearZoom();
  982.         this.preloadPages(pageNum);
  983.         var page = RunTime.getPage(pageNum);
  984.         if(page == null) return;
  985.         this.setCurrentPage(pageNum + 1);
  986.         this.currentPageNum = pageNum;
  987.         this.hideTopBar();
  988.         RunTime.flipBook.rightPageLock.style.display = "none";
  989.         RunTime.flipBook.leftPageLock.style.display = "none";
  990.         if(page != null && page.locked && RunTime.bLocked) RunTime.flipBook.leftPageLock.style.display = "block";
  991.         this.clearSlideshow();
  992.         this.loadCtxHotlinks();
  993.         this.loadCtxSlideshow();
  994.         this.loadCtxButtons();
  995.         this.loadCtxHighLights();
  996.         this.loadCtxNotes();
  997.         this.clearVideos();
  998.         this.bookContext.removeAllPages();
  999.         this.bookContext.resetLayoutParams();
  1000.         this.bookContext.addPage(page);
  1001.         this.bookContext.pageOffset = 0;
  1002.         this.bookContext.render();
  1003.         this.updateVideos();
  1004.         RunTime.logPageView(pageNum + 1);
  1005.     }
  1006.     ,turnPage: function(pageOffset) {
  1007.         if(pageOffset == 0) return;
  1008.         if(RunTime.book.rightToLeft) pageOffset = 0 - pageOffset;
  1009.         if(RunTime.book == null || RunTime.book.pages == null) return;
  1010.         var dstPageNum = this.currentPageNum + pageOffset;
  1011.         var dstPage = RunTime.getPage(dstPageNum);
  1012.         if(dstPage == null) return;
  1013.         this.resetZoom();
  1014.         this.setCurrentPage(dstPageNum + 1);
  1015.         var self = this;
  1016.         this.bookContext.removeAllPages();
  1017.         this.bookContext.resetLayoutParams();
  1018.         this.bookContext.addPage(RunTime.getPage(this.currentPageNum,0));
  1019.         this.bookContext.addPage(RunTime.getPage(this.currentPageNum,1));
  1020.         this.bookContext.addPage(RunTime.getPage(this.currentPageNum,-1));
  1021.         this.bookContext.pageOffset = 0;
  1022.         if(this.tweener != null) this.tweener.stop();
  1023.         var maxCount = 12;
  1024.         this.tweener.onChange = function(count) {
  1025.             var ratio = count / maxCount;
  1026.             if(RunTime.book.rightToLeft) self.bookContext.pageOffset = pageOffset * ratio * ratio; else self.bookContext.pageOffset = -pageOffset * ratio * ratio;
  1027.             if(count == maxCount) self.bookContext.pageOffset = -pageOffset;
  1028.             if(count == maxCount) {
  1029.                 self.currentPageNum = dstPageNum;
  1030.                 self.loadCtxHotlinks();
  1031.                 self.loadCtxSlideshow();
  1032.                 self.loadCtxButtons();
  1033.                 self.loadCtxHighLights();
  1034.                 self.loadCtxNotes();
  1035.                 self.updateVideos();
  1036.                 RunTime.flipBook.rightPageLock.style.display = "none";
  1037.                 RunTime.flipBook.leftPageLock.style.display = "none";
  1038.                 if(dstPage != null && dstPage.locked && RunTime.bLocked) RunTime.flipBook.leftPageLock.style.display = "block";
  1039.                 RunTime.logPageView(dstPageNum + 1);
  1040.                 RunTime.clearPopupContents();
  1041.                 self.onEnterPage();
  1042.             }
  1043.             self.bookContext.render();
  1044.         };
  1045.         this.clearCtxHotlinks();
  1046.         this.clearCtxButtons();
  1047.         this.clearVideos();
  1048.         this.clearSlideshow();
  1049.         this.tweener.start(maxCount | 0);
  1050.     }
  1051.     ,onMouseDown: function(e) {
  1052.         e.stopPropagation();
  1053.         if(this.bStartHighLight || this.bStartNote) return;
  1054.         if(Math.abs(js.Lib.window.innerWidth - RunTime.clientWidth) < 10) {
  1055.             if(this.topMenuBarBg.style.opacity != RunTime.bottomBarAlpha) this.showBottomBar(e); else this.hideBottomBar(e);
  1056.         }
  1057.     }
  1058.     ,onMouseUp: function(e) {
  1059.     }
  1060.     ,onNoteClick: function(x,y) {
  1061.         var note = this.bookContext.getNoteAt(x,y);
  1062.         if(note != null && this.bStartNote) {
  1063.             RunTime.currentNote = note;
  1064.             note.click();
  1065.             return true;
  1066.         } else RunTime.currentNote = null;
  1067.         return false;
  1068.     }
  1069.     ,onHighLightClick: function(x,y) {
  1070.         var highlight = this.bookContext.getHighLightAt(x,y);
  1071.         if(highlight != null && this.bStartHighLight) {
  1072.             RunTime.currentHighLight = highlight;
  1073.             highlight.click();
  1074.             return true;
  1075.         } else RunTime.currentHighLight = null;
  1076.         return false;
  1077.     }
  1078.     ,onButtonLinkClick: function(x,y) {
  1079.         var hotlink = this.bookContext.getHotLinkAt(x,y);
  1080.         if(hotlink != null) {
  1081.             hotlink.click();
  1082.             return true;
  1083.         }
  1084.         var button = this.bookContext.getButtonAt(x,y);
  1085.         if(button != null) {
  1086.             button.click();
  1087.             return true;
  1088.         }
  1089.         return false;
  1090.     }
  1091.     ,loadPage: function(index) {
  1092.         RunTime.flipBook.rightPageLock.style.display = "none";
  1093.         this.preloadPages(index);
  1094.         this.currentPageNum = index;
  1095.         this.loadCtxHotlinks();
  1096.         this.loadCtxSlideshow();
  1097.         var page = RunTime.getPage(this.currentPageNum);
  1098.         this.bookContext.addPage(page);
  1099.         if(page != null && page.locked && RunTime.bLocked) RunTime.flipBook.leftPageLock.style.display = "block";
  1100.         this.bookContext.render();
  1101.         var p = this.currentPageNum;
  1102.         if(p == null) p = 0;
  1103.         RunTime.logPageView(p + 1);
  1104.         this.onEnterPage();
  1105.     }
  1106.     ,afterInit: function() {
  1107.     }
  1108.     ,forbidden: function(e) {
  1109.         e.preventDefault();
  1110.         e.stopPropagation();
  1111.     }
  1112.     ,attachActions: function() {
  1113.         if(this.root == null) return;
  1114.         this.mask.ondblclick = $bind(this,this.onDblClick);
  1115.         this.mask.onclick = $bind(this,this.onMouseDown);
  1116.         this.mask.ontouchstart = $bind(this,this.onTouchStart);
  1117.         this.mask.ontouchmove = $bind(this,this.onTouchMove);
  1118.         this.mask.ontouchend = $bind(this,this.onTouchEnd);
  1119.         this.mask.ontouchcancel = $bind(this,this.onTouchEnd);
  1120.         this.mask.gestureend = $bind(this,this.onGestureEnd);
  1121.         this.mask.gesturestart = $bind(this,this.onGestureStart);
  1122.         this.mask.gesturechange = $bind(this,this.onGestureChange);
  1123.         this.mask.onscroll = $bind(this,this.forbidden);
  1124.         this.mask.onmousewheel = $bind(this,this.forbidden);
  1125.         this.cvsVideo.onclick = $bind(this,this.onMouseDown);
  1126.         this.cvsVideo.ontouchstart = $bind(this,this.onTouchStart);
  1127.         this.cvsVideo.ontouchmove = $bind(this,this.onTouchMove);
  1128.         this.cvsVideo.ontouchend = $bind(this,this.onTouchEnd);
  1129.         this.cvsVideo.ontouchcancel = $bind(this,this.onTouchEnd);
  1130.         this.cvsVideo.gestureend = $bind(this,this.onGestureEnd);
  1131.         this.cvsVideo.gesturestart = $bind(this,this.onGestureStart);
  1132.         this.cvsVideo.gesturechange = $bind(this,this.onGestureChange);
  1133.         this.maskPopup.onscroll = $bind(this,this.forbidden);
  1134.         this.maskPopup.onmousewheel = $bind(this,this.forbidden);
  1135.         if(js.Lib.window.navigator.userAgent.indexOf("iPad") != -1) {
  1136.             this.topBarContent.ontouchstart = $bind(this,this.onTopBarTouchStart);
  1137.             this.topBarContent.ontouchmove = $bind(this,this.onTopBarTouchMove);
  1138.             this.topBarContent.ontouchend = $bind(this,this.onTopBarTouchEnd);
  1139.             this.topBarContent.ontouchcancel = $bind(this,this.onTopBarTouchEnd);
  1140.             this.topFullTextContent.ontouchstart = $bind(this,this.onTopBarTouchStart);
  1141.             this.topFullTextContent.ontouchmove = $bind(this,this.onTopBarTouchMove);
  1142.             this.topFullTextContent.ontouchend = $bind(this,this.onTopBarTouchEnd);
  1143.             this.topFullTextContent.ontouchcancel = $bind(this,this.onTopBarTouchEnd);
  1144.         }
  1145.         this.btnNextPage.ontouchstart = $bind(this,this.turnToNextPage);
  1146.         this.btnPrevPage.ontouchstart = $bind(this,this.turnToPrevPage);
  1147.         this.btnFirstPage.ontouchstart = $bind(this,this.turnToFirstPage);
  1148.         this.btnLastPage.ontouchstart = $bind(this,this.turnToLastPage);
  1149.         this.btnContents.onclick = $bind(this,this.onContentsClick);
  1150.         this.btnEmail.onclick = $bind(this,this.onEmailClick);
  1151.         this.btnSns.onclick = $bind(this,this.onSnsClick);
  1152.         this.btnThumbs.onclick = $bind(this,this.onThumbsClick);
  1153.         this.btnSearch.ontouchstart = $bind(this,this.onSearchClick);
  1154.         this.btnAutoFlip.ontouchstart = $bind(this,this.onAutoFlipClick);
  1155.         this.btnShowTxt.ontouchstart = $bind(this,this.onShowTxtClick);
  1156.         this.tbPage.onfocus = $bind(this,this.onTbPageFocus);
  1157.         this.btnZoom.ontouchstart = $bind(this,this.onZoomClick);
  1158.         this.btnMask.ontouchstart = $bind(this,this.onButtonMaskClick);
  1159.         this.btnBookMark.ontouchstart = $bind(this,this.onButtonBookmark);
  1160.         this.btnNote.ontouchstart = $bind(this,this.onButtonNoteClick);
  1161.     }
  1162.     ,getNoteContext: function() {
  1163.         return this.cvsNote.getContext("2d");
  1164.     }
  1165.     ,getHighLightContext: function() {
  1166.         return this.cvsHighLight.getContext("2d");
  1167.     }
  1168.     ,getButtonContext: function() {
  1169.         return this.cvsButton.getContext("2d");
  1170.     }
  1171.     ,getContext: function() {
  1172.         return this.canvas.getContext("2d");
  1173.     }
  1174.     ,__class__: FlipBook
  1175. }
  1176. var DoubleFlipBook = function() {
  1177.     FlipBook.call(this);
  1178. };
  1179. DoubleFlipBook.__name__ = true;
  1180. DoubleFlipBook.__super__ = FlipBook;
  1181. DoubleFlipBook.prototype = $extend(FlipBook.prototype,{
  1182.     loadCtxNotes: function() {
  1183.         var pair = this.getCurrentPair();
  1184.         var notes = new Array();
  1185.         if(RunTime.book != null && RunTime.book.notes != null) {
  1186.             var _g1 = 0, _g = RunTime.book.notes.length;
  1187.             while(_g1 < _g) {
  1188.                 var i = _g1++;
  1189.                 var item = RunTime.book.notes[i];
  1190.                 var match = pair.match(item.pageNum);
  1191.                 if(match != 0) {
  1192.                     item.pageLayoutType = match;
  1193.                     notes.push(item);
  1194.                 }
  1195.             }
  1196.         }
  1197.         this.bookContext.notes = notes;
  1198.     }
  1199.     ,loadCtxHighLights: function() {
  1200.         var pair = this.getCurrentPair();
  1201.         var highlights = new Array();
  1202.         if(RunTime.book != null && RunTime.book.highlights != null) {
  1203.             var _g1 = 0, _g = RunTime.book.highlights.length;
  1204.             while(_g1 < _g) {
  1205.                 var i = _g1++;
  1206.                 var item = RunTime.book.highlights[i];
  1207.                 var match = pair.match(item.pageNum);
  1208.                 if(match != 0) {
  1209.                     item.pageLayoutType = match;
  1210.                     highlights.push(item);
  1211.                 }
  1212.             }
  1213.         }
  1214.         this.bookContext.highlights = highlights;
  1215.     }
  1216.     ,loadCtxButtons: function() {
  1217.         var buttons = new Array();
  1218.         if(RunTime.book != null && RunTime.book.buttons != null) {
  1219.             var pair = this.getCurrentPair();
  1220.             var _g1 = 0, _g = RunTime.book.buttons.length;
  1221.             while(_g1 < _g) {
  1222.                 var i = _g1++;
  1223.                 var item = RunTime.book.buttons[i];
  1224.                 var match = pair.match(item.pageNum);
  1225.                 if(match != 0 && item.layer == "onpage") {
  1226.                     item.pageLayoutType = match;
  1227.                     buttons.push(item);
  1228.                 } else if(item.layer == "foreground") {
  1229.                     if((item.pageNum + 1) % 2 != 0) item.pageLayoutType = 1; else item.pageLayoutType = -1;
  1230.                     buttons.push(item);
  1231.                 } else if(item.layer == "background") {
  1232.                     if(pair.leftPage == null && (item.pageNum + 1) % 2 == 0) {
  1233.                         item.pageLayoutType = -1;
  1234.                         buttons.push(item);
  1235.                     }
  1236.                     if(pair.rightPage == null && (item.pageNum + 1) % 2 != 0) {
  1237.                         item.pageLayoutType = 1;
  1238.                         buttons.push(item);
  1239.                     }
  1240.                 }
  1241.             }
  1242.         }
  1243.         this.bookContext.buttons = buttons;
  1244.     }
  1245.     ,canTurnRight: function() {
  1246.         var num = this.getCurrentPageNum();
  1247.         var count = RunTime.book.pages.length;
  1248.         if(num % 2 == 1) num++;
  1249.         return num < count - 1;
  1250.     }
  1251.     ,showPopupAudio: function(item) {
  1252.         item.url = item.destination;
  1253.         var pageNum = item.pageNum;
  1254.         var audio = new core.AudioInfo();
  1255.         audio.pageNum = pageNum;
  1256.         audio.url = item.destination;
  1257.         if(pageNum % 2 == 1) {
  1258.             this.cvsLeftPageBgAudio.innerHTML = "";
  1259.             this.cvsLeftPageBgAudio.innerHTML = core.HtmlHelper.toPopupPageAudiosHtml(audio,true);
  1260.             var item1 = js.Lib.document.getElementById("cvsLeftPageBgAudio").getElementsByTagName("audio")[0];
  1261.             item1.play();
  1262.         } else {
  1263.             this.cvsRightPageBgAudio.innerHTML = "";
  1264.             this.cvsRightPageBgAudio.innerHTML = core.HtmlHelper.toPopupPageAudiosHtml(audio,false);
  1265.             var item1 = js.Lib.document.getElementById("cvsRightPageBgAudio").getElementsByTagName("audio")[0];
  1266.             item1.play();
  1267.         }
  1268.     }
  1269.     ,turnPage: function(pageOffset) {
  1270.         var current = 0;
  1271.         if(this.currentPageNum != null) current = this.currentPageNum;
  1272.         if(RunTime.book.rightToLeft) pageOffset = 0 - pageOffset;
  1273.         current = current + pageOffset * 2;
  1274.         if(current < 0) current = 0;
  1275.         if(current >= RunTime.book.pages.length) current = RunTime.book.pages.length - 1;
  1276.         this.turnToPage(current);
  1277.     }
  1278.     ,setCurrentPage: function(val) {
  1279.         var count = RunTime.book.pages.length;
  1280.         var t = this.tbPage;
  1281.         if(val == 1) {
  1282.             t.value = Std.string(val);
  1283.             this.leftPageNum = -1;
  1284.             this.rightPageNum = val;
  1285.         } else if(val % 2 == 0 && val == count) {
  1286.             t.value = Std.string(val);
  1287.             this.leftPageNum = val;
  1288.             this.rightPageNum = -1;
  1289.         } else {
  1290.             var v0 = val - val % 2;
  1291.             var v1 = v0 + 1;
  1292.             this.leftPageNum = v0;
  1293.             this.rightPageNum = v1;
  1294.             t.value = Std.string(v0) + "-" + Std.string(v1);
  1295.         }
  1296.     }
  1297.     ,loadCtxVideos: function() {
  1298.         var videos = new Array();
  1299.         if(RunTime.book != null && RunTime.book.videos != null) {
  1300.             var pair = this.getCurrentPair();
  1301.             var _g1 = 0, _g = RunTime.book.videos.length;
  1302.             while(_g1 < _g) {
  1303.                 var i = _g1++;
  1304.                 var item = RunTime.book.videos[i];
  1305.                 var match = pair.match(item.pageNum);
  1306.                 if(match != 0) {
  1307.                     item.pageLayoutType = match;
  1308.                     videos.push(item);
  1309.                 }
  1310.             }
  1311.         }
  1312.         this.bookContext.videos = videos;
  1313.     }
  1314.     ,loadCtxHotlinks: function() {
  1315.         var links = new Array();
  1316.         if(RunTime.book != null && RunTime.book.hotlinks != null) {
  1317.             var pair = this.getCurrentPair();
  1318.             var _g1 = 0, _g = RunTime.book.hotlinks.length;
  1319.             while(_g1 < _g) {
  1320.                 var i = _g1++;
  1321.                 var item = RunTime.book.hotlinks[i];
  1322.                 var match = pair.match(item.pageNum);
  1323.                 if(match != 0) {
  1324.                     item.pageLayoutType = match;
  1325.                     links.push(item);
  1326.                 }
  1327.             }
  1328.         }
  1329.         this.bookContext.hotlinks = links;
  1330.     }
  1331.     ,loadCtxSlideshow: function() {
  1332.         var slides = new Array();
  1333.         if(RunTime.book != null && RunTime.book.slideshows != null) {
  1334.             var pair = this.getCurrentPair();
  1335.             var _g1 = 0, _g = RunTime.book.slideshows.length;
  1336.             while(_g1 < _g) {
  1337.                 var i = _g1++;
  1338.                 var item = RunTime.book.slideshows[i];
  1339.                 var match = pair.match(item.pageNum);
  1340.                 if(match != 0) {
  1341.                     item.pageLayoutType = match;
  1342.                     slides.push(item);
  1343.                 }
  1344.             }
  1345.         }
  1346.         this.bookContext.slideshow = slides;
  1347.         this.updateSlideshow();
  1348.     }
  1349.     ,zoomAt: function(point0,point1) {
  1350.         var num = 0;
  1351.         if(this.currentPageNum != null) num = this.currentPageNum;
  1352.         var pair = this.getCurrentPair();
  1353.         if(point0 == null || point1 == null) this.pageZoomOut(); else this.pageZoomIn(pair,point0,point1);
  1354.     }
  1355.     ,pageZoomIn: function(page,point0,point1) {
  1356.         this.zoomStatus = core.ZoomStatus.zoomed;
  1357.         if(page == null) return;
  1358.         if(page.leftPage != null) {
  1359.             if(!page.leftPage.locked) this.zoomLeftPage.src = page.leftPage.getBigPageUrl(); else {
  1360.             }
  1361.             this.zoomLeftPage.style.display = "inline";
  1362.         }
  1363.         if(page.rightPage != null) {
  1364.             if(!page.rightPage.locked) this.zoomRightPage.src = page.rightPage.getBigPageUrl(); else {
  1365.             }
  1366.             this.zoomRightPage.style.display = "inline";
  1367.         }
  1368.     }
  1369.     ,pageZoomOut: function() {
  1370.         this.zoomStatus = core.ZoomStatus.normal;
  1371.         this.page_offsetX = 0;
  1372.         this.page_offsetY = 0;
  1373.         if(this.bShowBottomBar) this.showBottomBar(null);
  1374.     }
  1375.     ,getCurrentPair: function() {
  1376.         var current = 0;
  1377.         if(this.currentPageNum != null) current = this.currentPageNum;
  1378.         return new core.PagePair(current);
  1379.     }
  1380.     ,turnToPage: function(pageNum) {
  1381.         this.preloadPages(pageNum);
  1382.         var current = this.getCurrentPageNum();
  1383.         if(current < 0 || current >= RunTime.book.pages.length) return;
  1384.         if(pageNum < 0 || pageNum >= RunTime.book.pages.length) return;
  1385.         var oldPair = new core.PagePair(current);
  1386.         var newPair = new core.PagePair(pageNum);
  1387.         var oldNum = oldPair.getNumInDoubleMode();
  1388.         var newNum = newPair.getNumInDoubleMode();
  1389.         if(newNum < 0 || oldNum == newNum) return;
  1390.         this.bookContext.removeAllPages();
  1391.         this.bookContext.resetLayoutParams();
  1392.         this.setCurrentPage(pageNum + 1);
  1393.         this.bookContext.addPage(oldPair.leftPage);
  1394.         this.bookContext.addPage(oldPair.rightPage);
  1395.         this.bookContext.addPage(newPair.leftPage);
  1396.         this.bookContext.addPage(newPair.rightPage);
  1397.         if(newPair.leftPage != null) RunTime.logPageView(newPair.leftPage.num + 1);
  1398.         if(newPair.rightPage != null) RunTime.logPageView(newPair.rightPage.num + 1);
  1399.         this.bookContext.pageOffset = 0;
  1400.         var pageOffset = 0;
  1401.         var offset = 0;
  1402.         var dstPageOffset = newNum > oldNum?1:-1;
  1403.         var ldp = RunTime.getDrawParams(-1);
  1404.         var rdp = RunTime.getDrawParams(1);
  1405.         var update = function(val) {
  1406.             var downLeft = oldPair.leftPage;
  1407.             var downRight = oldPair.rightPage;
  1408.             var upLeft = newPair.leftPage;
  1409.             var upRight = newPair.rightPage;
  1410.             if(dstPageOffset > 0) {
  1411.                 if(RunTime.book.rightToLeft) {
  1412.                     if(downLeft != null) {
  1413.                         if(val <= 0.5) downLeft.drawParams = ldp; else downLeft.drawParams = ldp.sliceRight(2 - val * 2);
  1414.                     }
  1415.                     if(downRight != null) {
  1416.                     }
  1417.                     if(upLeft != null) upLeft.drawParams = ldp.sliceRight(val,-ldp.dw * 2 * (1 - val));
  1418.                     if(upRight != null) upRight.drawParams = rdp.sliceLeft(val);
  1419.                 } else {
  1420.                     if(downLeft != null) {
  1421.                         if(val <= 0.5) downLeft.drawParams = ldp; else downLeft.drawParams = ldp.sliceLeft(2 - val * 2);
  1422.                     }
  1423.                     if(downRight != null) {
  1424.                     }
  1425.                     if(upLeft != null) upLeft.drawParams = ldp.sliceLeft(val,ldp.dw * 2 * (1 - val));
  1426.                     if(upRight != null) upRight.drawParams = rdp.sliceRight(val);
  1427.                 }
  1428.             } else {
  1429.                 val = -val;
  1430.                 if(RunTime.book.rightToLeft) {
  1431.                     if(downLeft != null) {
  1432.                         if(val <= 0.5) downLeft.drawParams = ldp.sliceLeft(1 - 2 * val); else downLeft.drawParams = null;
  1433.                     }
  1434.                     if(downRight != null) {
  1435.                         if(val <= 0.5) downRight.drawParams = rdp; else downRight.drawParams = rdp.sliceLeft(2 - val * 2);
  1436.                     }
  1437.                     if(upLeft != null) upLeft.drawParams = ldp.sliceRight(val);
  1438.                     if(upRight != null) upRight.drawParams = rdp.sliceLeft(val,rdp.dw * 2 * (1 - val));
  1439.                 } else {
  1440.                     if(downLeft != null) {
  1441.                         if(val <= 0.5) downLeft.drawParams = ldp.sliceRight(1 - 2 * val); else downLeft.drawParams = null;
  1442.                     }
  1443.                     if(downRight != null) {
  1444.                         if(val <= 0.5) downRight.drawParams = rdp; else downRight.drawParams = rdp.sliceRight(2 - val * 2);
  1445.                     }
  1446.                     if(upLeft != null) upLeft.drawParams = ldp.sliceLeft(val);
  1447.                     if(upRight != null) upRight.drawParams = rdp.sliceRight(val,-rdp.dw * 2 * (1 - val));
  1448.                 }
  1449.             }
  1450.         };
  1451.         update(0);
  1452.         if(this.tweener != null) this.tweener.stop();
  1453.         var self = this;
  1454.         var ctx = this.bookContext;
  1455.         var maxCount = 8;
  1456.         this.tweener.onChange = function(count) {
  1457.             var ratio = count / maxCount;
  1458.             offset = dstPageOffset * ratio * ratio * ratio;
  1459.             update(offset);
  1460.             if(count == maxCount) {
  1461.                 ctx.clear(true);
  1462.                 ctx.addPage(newPair.leftPage);
  1463.                 ctx.addPage(newPair.rightPage);
  1464.                 self.currentPageNum = pageNum;
  1465.                 self.loadCtxHotlinks();
  1466.                 self.loadCtxSlideshow();
  1467.                 self.loadCtxButtons();
  1468.                 self.loadCtxHighLights();
  1469.                 self.loadCtxNotes();
  1470.                 self.updateVideos();
  1471.                 self.onEnterPage();
  1472.                 RunTime.flipBook.rightPageLock.style.display = "none";
  1473.                 RunTime.flipBook.leftPageLock.style.display = "none";
  1474.                 if(newPair.rightPage != null && newPair.rightPage.locked && RunTime.bLocked) RunTime.flipBook.rightPageLock.style.display = "block";
  1475.                 if(newPair.leftPage != null && newPair.leftPage.locked && RunTime.bLocked) RunTime.flipBook.leftPageLock.style.display = "block";
  1476.             }
  1477.             self.bookContext.render();
  1478.         };
  1479.         this.clearCtxHotlinks();
  1480.         this.clearCtxButtons();
  1481.         this.clearCtxNote();
  1482.         this.clearCtxHighLight();
  1483.         this.clearVideos();
  1484.         this.clearSlideshow();
  1485.         this.tweener.start(maxCount | 0);
  1486.         this.hideTopBar();
  1487.     }
  1488.     ,getCurrentPageAudios: function() {
  1489.         var audios = RunTime.book.audios;
  1490.         var match = { left : null, right : null};
  1491.         var lftPg = -1;
  1492.         var rtPg = -1;
  1493.         var p = this.getCurrentPair();
  1494.         if(p.leftPage != null) lftPg = p.leftPage.num;
  1495.         if(p.rightPage != null) rtPg = p.rightPage.num;
  1496.         var _g1 = 0, _g = audios.length;
  1497.         while(_g1 < _g) {
  1498.             var i = _g1++;
  1499.             var item = audios[i];
  1500.             if(item.pageNum == lftPg) match.left = item; else if(item.pageNum == rtPg) match.right = item;
  1501.         }
  1502.         return match;
  1503.     }
  1504.     ,getFullText: function(pages) {
  1505.         var lftPg = -1;
  1506.         var rtPg = -1;
  1507.         var p = this.getCurrentPair();
  1508.         if(p.leftPage != null) lftPg = p.leftPage.num;
  1509.         if(p.rightPage != null) rtPg = p.rightPage.num;
  1510.         if(lftPg > rtPg) {
  1511.             var tmp = rtPg;
  1512.             rtPg = lftPg;
  1513.             lftPg = tmp;
  1514.         }
  1515.         var result = "";
  1516.         var _g1 = 0, _g = pages.length;
  1517.         while(_g1 < _g) {
  1518.             var i = _g1++;
  1519.             var item = pages[i];
  1520.             if(item.num == lftPg) {
  1521.                 result += "<br />";
  1522.                 result += "<br />";
  1523.                 result += "==== Page " + Std.string(lftPg + 1) + " ====";
  1524.                 result += "<br />";
  1525.                 result += "<br />";
  1526.                 result += item.content;
  1527.                 result += "<br />";
  1528.                 result += "<br />";
  1529.             } else if(item.num == rtPg) {
  1530.                 result += "<br />";
  1531.                 result += "<br />";
  1532.                 result += "==== Page " + Std.string(rtPg + 1) + " ====";
  1533.                 result += "<br />";
  1534.                 result += "<br />";
  1535.                 result += item.content;
  1536.                 result += "<br />";
  1537.                 result += "<br />";
  1538.             }
  1539.         }
  1540.         result = StringTools.replace(result,"\n","<br />");
  1541.         return result;
  1542.     }
  1543.     ,loadPage: function(index) {
  1544.         this.preloadPages(index);
  1545.         this.currentPageNum = index;
  1546.         this.loadCtxHotlinks();
  1547.         this.loadCtxSlideshow();
  1548.         this.loadCtxButtons();
  1549.         this.loadCtxHighLights();
  1550.         this.loadCtxNotes();
  1551.         this.updateVideos();
  1552.         var p = this.getCurrentPair();
  1553.         this.bookContext.addPage(p.leftPage);
  1554.         this.bookContext.addPage(p.rightPage);
  1555.         if(p.rightPage != null && p.rightPage.locked && RunTime.bLocked) RunTime.flipBook.rightPageLock.style.display = "block";
  1556.         if(p.leftPage != null && p.leftPage.locked && RunTime.bLocked) RunTime.flipBook.leftPageLock.style.display = "block";
  1557.         this.bookContext.render();
  1558.         if(p.leftPage != null) RunTime.logPageView(p.leftPage.num + 1);
  1559.         if(p.rightPage != null) RunTime.logPageView(p.rightPage.num + 1);
  1560.         this.onEnterPage();
  1561.     }
  1562.     ,checkCanZoom: function() {
  1563.         var p = this.getCurrentPair();
  1564.         if(p.leftPage != null) {
  1565.             if(!p.leftPage.canZoom) return false;
  1566.         }
  1567.         if(p.rightPage != null) {
  1568.             if(!p.rightPage.canZoom) return false;
  1569.         }
  1570.         return true;
  1571.     }
  1572.     ,afterInit: function() {
  1573.         this.tbPage.style.width = "60px";
  1574.     }
  1575.     ,__class__: DoubleFlipBook
  1576. });
  1577. var EReg = function(r,opt) {
  1578.     opt = opt.split("u").join("");
  1579.     this.r = new RegExp(r,opt);
  1580. };
  1581. EReg.__name__ = true;
  1582. EReg.prototype = {
  1583.     customReplace: function(s,f) {
  1584.         var buf = new StringBuf();
  1585.         while(true) {
  1586.             if(!this.match(s)) break;
  1587.             buf.b += Std.string(this.matchedLeft());
  1588.             buf.b += Std.string(f(this));
  1589.             s = this.matchedRight();
  1590.         }
  1591.         buf.b += Std.string(s);
  1592.         return buf.b;
  1593.     }
  1594.     ,replace: function(s,by) {
  1595.         return s.replace(this.r,by);
  1596.     }
  1597.     ,split: function(s) {
  1598.         var d = "#__delim__#";
  1599.         return s.replace(this.r,d).split(d);
  1600.     }
  1601.     ,matchedPos: function() {
  1602.         if(this.r.m == null) throw "No string matched";
  1603.         return { pos : this.r.m.index, len : this.r.m[0].length};
  1604.     }
  1605.     ,matchedRight: function() {
  1606.         if(this.r.m == null) throw "No string matched";
  1607.         var sz = this.r.m.index + this.r.m[0].length;
  1608.         return this.r.s.substr(sz,this.r.s.length - sz);
  1609.     }
  1610.     ,matchedLeft: function() {
  1611.         if(this.r.m == null) throw "No string matched";
  1612.         return this.r.s.substr(0,this.r.m.index);
  1613.     }
  1614.     ,matched: function(n) {
  1615.         return this.r.m != null && n >= 0 && n < this.r.m.length?this.r.m[n]:(function($this) {
  1616.             var $r;
  1617.             throw "EReg::matched";
  1618.             return $r;
  1619.         }(this));
  1620.     }
  1621.     ,match: function(s) {
  1622.         if(this.r.global) this.r.lastIndex = 0;
  1623.         this.r.m = this.r.exec(s);
  1624.         this.r.s = s;
  1625.         return this.r.m != null;
  1626.     }
  1627.     ,__class__: EReg
  1628. }
  1629. var Hash = function() {
  1630.     this.h = { };
  1631. };
  1632. Hash.__name__ = true;
  1633. Hash.prototype = {
  1634.     toString: function() {
  1635.         var s = new StringBuf();
  1636.         s.b += Std.string("{");
  1637.         var it = this.keys();
  1638.         while( it.hasNext() ) {
  1639.             var i = it.next();
  1640.             s.b += Std.string(i);
  1641.             s.b += Std.string(" => ");
  1642.             s.b += Std.string(Std.string(this.get(i)));
  1643.             if(it.hasNext()) s.b += Std.string(", ");
  1644.         }
  1645.         s.b += Std.string("}");
  1646.         return s.b;
  1647.     }
  1648.     ,iterator: function() {
  1649.         return { ref : this.h, it : this.keys(), hasNext : function() {
  1650.             return this.it.hasNext();
  1651.         }, next : function() {
  1652.             var i = this.it.next();
  1653.             return this.ref["$" + i];
  1654.         }};
  1655.     }
  1656.     ,keys: function() {
  1657.         var a = [];
  1658.         for( var key in this.h ) {
  1659.         if(this.h.hasOwnProperty(key)) a.push(key.substr(1));
  1660.         }
  1661.         return HxOverrides.iter(a);
  1662.     }
  1663.     ,remove: function(key) {
  1664.         key = "$" + key;
  1665.         if(!this.h.hasOwnProperty(key)) return false;
  1666.         delete(this.h[key]);
  1667.         return true;
  1668.     }
  1669.     ,exists: function(key) {
  1670.         return this.h.hasOwnProperty("$" + key);
  1671.     }
  1672.     ,get: function(key) {
  1673.         return this.h["$" + key];
  1674.     }
  1675.     ,set: function(key,value) {
  1676.         this.h["$" + key] = value;
  1677.     }
  1678.     ,__class__: Hash
  1679. }
  1680. var HtmlDomHelper = function() { }
  1681. HtmlDomHelper.__name__ = true;
  1682. HtmlDomHelper.setTopBarDefaultSize = function(dom) {
  1683.     dom.style.width = "500px";
  1684.     dom.style.left = Std.string((RunTime.clientWidth - 500) / 2 | 0) + "px";
  1685. }
  1686. HtmlDomHelper.setTopBarMaxSize = function(dom) {
  1687.     dom.style.width = Std.string(RunTime.clientWidth | 0) + "px";
  1688.     dom.style.left = "0px";
  1689. }
  1690. HtmlDomHelper.setTopFullTextContentMaxSize = function(dom) {
  1691.     dom.style.width = Std.string((RunTime.clientWidth | 0) - 20) + "px";
  1692.     dom.style.top = "35px";
  1693.     dom.style.height = Std.string((RunTime.clientHeight | 0) - 80) + "px";
  1694.     dom.style.left = "0px";
  1695. }
  1696. var HxOverrides = function() { }
  1697. HxOverrides.__name__ = true;
  1698. HxOverrides.dateStr = function(date) {
  1699.     var m = date.getMonth() + 1;
  1700.     var d = date.getDate();
  1701.     var h = date.getHours();
  1702.     var mi = date.getMinutes();
  1703.     var s = date.getSeconds();
  1704.     return date.getFullYear() + "-" + (m < 10?"0" + m:"" + m) + "-" + (d < 10?"0" + d:"" + d) + " " + (h < 10?"0" + h:"" + h) + ":" + (mi < 10?"0" + mi:"" + mi) + ":" + (s < 10?"0" + s:"" + s);
  1705. }
  1706. HxOverrides.strDate = function(s) {
  1707.     switch(s.length) {
  1708.     case 8:
  1709.         var k = s.split(":");
  1710.         var d = new Date();
  1711.         d.setTime(0);
  1712.         d.setUTCHours(k[0]);
  1713.         d.setUTCMinutes(k[1]);
  1714.         d.setUTCSeconds(k[2]);
  1715.         return d;
  1716.     case 10:
  1717.         var k = s.split("-");
  1718.         return new Date(k[0],k[1] - 1,k[2],0,0,0);
  1719.     case 19:
  1720.         var k = s.split(" ");
  1721.         var y = k[0].split("-");
  1722.         var t = k[1].split(":");
  1723.         return new Date(y[0],y[1] - 1,y[2],t[0],t[1],t[2]);
  1724.     default:
  1725.         throw "Invalid date format : " + s;
  1726.     }
  1727. }
  1728. HxOverrides.cca = function(s,index) {
  1729.     var x = s.charCodeAt(index);
  1730.     if(x != x) return undefined;
  1731.     return x;
  1732. }
  1733. HxOverrides.substr = function(s,pos,len) {
  1734.     if(pos != null && pos != 0 && len != null && len < 0) return "";
  1735.     if(len == null) len = s.length;
  1736.     if(pos < 0) {
  1737.         pos = s.length + pos;
  1738.         if(pos < 0) pos = 0;
  1739.     } else if(len < 0) len = s.length + len - pos;
  1740.     return s.substr(pos,len);
  1741. }
  1742. HxOverrides.remove = function(a,obj) {
  1743.     var i = 0;
  1744.     var l = a.length;
  1745.     while(i < l) {
  1746.         if(a[i] == obj) {
  1747.             a.splice(i,1);
  1748.             return true;
  1749.         }
  1750.         i++;
  1751.     }
  1752.     return false;
  1753. }
  1754. HxOverrides.iter = function(a) {
  1755.     return { cur : 0, arr : a, hasNext : function() {
  1756.         return this.cur < this.arr.length;
  1757.     }, next : function() {
  1758.         return this.arr[this.cur++];
  1759.     }};
  1760. }
  1761. var IntIter = function(min,max) {
  1762.     this.min = min;
  1763.     this.max = max;
  1764. };
  1765. IntIter.__name__ = true;
  1766. IntIter.prototype = {
  1767.     next: function() {
  1768.         return this.min++;
  1769.     }
  1770.     ,hasNext: function() {
  1771.         return this.min < this.max;
  1772.     }
  1773.     ,__class__: IntIter
  1774. }
  1775. var L = function() { }
  1776. L.__name__ = true;
  1777. L.s = function(key,dftVal) {
  1778.     if(L.instance.exists(key) == false) return dftVal != null?dftVal:key; else return L.instance.get(key);
  1779. }
  1780. L.loadRemote = function(url,onSuccess,onError) {
  1781.     orc.utils.Util.request(url,function(data) {
  1782.         var xml = Xml.parse(data);
  1783.         L.loadXml(xml);
  1784.         if(onSuccess != null) onSuccess();
  1785.     },onError);
  1786. }
  1787. L.loadXml = function(xml) {
  1788.     if(xml == null) return;
  1789.     var i = xml.elementsNamed("lang");
  1790.     if(i.hasNext() == false) return;
  1791.     xml = i.next();
  1792.     i = xml.elementsNamed("item");
  1793.     while(i.hasNext() == true) {
  1794.         var node = i.next();
  1795.         var key = node.get("key");
  1796.         var val = node.get("value");
  1797.         L.instance.set(key,val);
  1798.     }
  1799. }
  1800. var Main = function() { }
  1801. Main.__name__ = true;
  1802. Main.main = function() {
  1803.     if(js.Lib.document.getElementById("cvsBook") == null) Zoom.Load(); else RunTime.init();
  1804. }
  1805. Main.testCss = function() {
  1806.     var t = new core.Tweener();
  1807.     var max = 20;
  1808.     var cvs = js.Lib.document.getElementById("img");
  1809.     t.onChange = function(count) {
  1810.         var l = Std.string(count * 30);
  1811.         cvs.style.left = l;
  1812.     };
  1813.     t.start(max);
  1814. }
  1815. var core = core || {}
  1816. core.Book = function() {
  1817.     this.pages = new Array();
  1818.     this.hotlinks = new Array();
  1819.     this.videos = new Array();
  1820.     this.audios = new Array();
  1821.     this.buttons = new Array();
  1822.     this.highlights = new Array();
  1823.     this.notes = new Array();
  1824.     this.bookmarks = new Array();
  1825.     this.slideshows = new Array();
  1826.     this.bookId = "";
  1827.     this.bookTitle = "";
  1828.     this.analyticsUA = "";
  1829.     this.singlepageMode = false;
  1830.     this.rightToLeft = false;
  1831.     this.menuTocVisible = true;
  1832.     this.menuThumbsVisible = true;
  1833.     this.menuSearchVisible = true;
  1834.     this.menuAutoFlipVisible = true;
  1835.     this.menuZoomVisible = true;
  1836.     this.menuBookmarkVisible = true;
  1837.     this.menuNoteVisible = true;
  1838.     this.menuHighlightVisible = true;
  1839. };
  1840. core.Book.__name__ = true;
  1841. core.Book.prototype = {
  1842.     preloadPages: function(num) {
  1843.         if(num == null) num = 0;
  1844.         if(num < 0 || num > this.pages.length - 1) return;
  1845.         var p = [];
  1846.         p.push(num);
  1847.         p.push(num + 1);
  1848.         p.push(num - 1);
  1849.         p.push(num + 2);
  1850.         p.push(num - 2);
  1851.         p.push(num + 3);
  1852.         p.push(num - 3);
  1853.         p.push(num + 4);
  1854.         p.push(num + 5);
  1855.         var _g1 = 0, _g = p.length;
  1856.         while(_g1 < _g) {
  1857.             var i = _g1++;
  1858.             var index = p[i];
  1859.             if(index >= 0 && index < this.pages.length) {
  1860.                 var page = this.pages[index];
  1861.                 page.getImagePage();
  1862.                 page.loadBigImagePage();
  1863.             }
  1864.         }
  1865.     }
  1866.     ,__class__: core.Book
  1867. }
  1868. var RunTime = function() { }
  1869. RunTime.__name__ = true;
  1870. RunTime.alert = function(msg) {
  1871.     js.Lib.alert(msg);
  1872. }
  1873. RunTime.init = function() {
  1874.     RunTime.kvPrex = js.Lib.window.location.pathname.split("?")[0];
  1875.     RunTime.clientWidth = js.Lib.window.document.body.clientWidth;
  1876.     RunTime.clientHeight = js.Lib.window.document.body.clientHeight;
  1877.     RunTime.defaultPageNum = Std.parseInt(orc.utils.Util.getUrlParam("page"));
  1878.     var dom = js.Lib.document.getElementById("hiddenSearch");
  1879.     var html = dom.innerHTML;
  1880.     dom.innerHTML = "";
  1881.     RunTime.searchHtmlCache = html;
  1882.     dom = js.Lib.document.getElementById("hiddenInput");
  1883.     html = dom.innerHTML;
  1884.     dom.innerHTML = "";
  1885.     RunTime.inputHtmlCache = html;
  1886.     RunTime.bgImage = js.Lib.document.getElementById("bgImage");
  1887.     RunTime.divLoading = js.Lib.document.getElementById("loading");
  1888.     RunTime.divLoading.style.top = (RunTime.clientHeight - RunTime.divLoading.clientHeight) / 2 + "px";
  1889.     RunTime.divLoading.style.left = (RunTime.clientWidth - RunTime.divLoading.clientWidth) / 2 + "px";
  1890.     RunTime.divLoading.style.display = "inline";
  1891.     RunTime.preRequestBookInfo();
  1892. }
  1893. RunTime.loadState = function() {
  1894.     var bbv = true;
  1895.     var params = orc.utils.Util.getUrlParams();
  1896.     var _g1 = 0, _g = params.length;
  1897.     while(_g1 < _g) {
  1898.         var i = _g1++;
  1899.         var item = params[i];
  1900.         if(item.key == "page") {
  1901.             var num = Std.parseInt(item.value);
  1902.             RunTime.defaultPageNum = num;
  1903.         } else if(item.key == "bbv") {
  1904.             if(item.value == "1") bbv = true; else if(item.value == "0") bbv = false;
  1905.         } else if(item.key == "pcode") RunTime.pcode = item.value;
  1906.     }
  1907.     if(bbv == true) RunTime.flipBook.showBottomBar(); else RunTime.flipBook.hideBottomBar(null,false);
  1908. }
  1909. RunTime.requestLanguages = function(callbackFunc) {
  1910.     orc.utils.Util.request(RunTime.urlLang,function(data) {
  1911.         var xml = Xml.parse(data);
  1912.         var i = xml.elementsNamed("languages");
  1913.         if(i.hasNext() == false) return;
  1914.         xml = i.next();
  1915.         i = xml.elementsNamed("language");
  1916.         if(i.hasNext() == false) return;
  1917.         var dftLang = null;
  1918.         while(i.hasNext() == true) {
  1919.             var node = i.next();
  1920.             var lang = new core.LangCfg();
  1921.             var cnt = node.get("content");
  1922.             var dft = node.get("default");
  1923.             if(dftLang == null) dftLang = lang;
  1924.             lang.content = cnt;
  1925.             if(dft == "yes" || dft == "Yes" || dft == "YES") {
  1926.                 lang.isDefault = true;
  1927.                 dftLang = lang;
  1928.             }
  1929.             RunTime.languages.push(lang);
  1930.         }
  1931.         if(dftLang != null) {
  1932.             var urlLangResource = RunTime.urlRoot + "data/languages/" + dftLang.content + ".xml";
  1933.             L.loadRemote(urlLangResource,callbackFunc,callbackFunc);
  1934.         } else callbackFunc();
  1935.     },callbackFunc);
  1936. }
  1937. RunTime.preRequestBookInfo = function() {
  1938.     orc.utils.Util.request(RunTime.urlBookinfo,function(data) {
  1939.         RunTime.bookInfo = Xml.parse(data);
  1940.         RunTime.getBookInfo();
  1941.         if(RunTime.book.singlepageMode) {
  1942.             RunTime.flipBook = new FlipBook();
  1943.             RunTime.singlePage = true;
  1944.         } else if(RunTime.clientHeight > RunTime.clientWidth) {
  1945.             RunTime.flipBook = new FlipBook();
  1946.             RunTime.singlePage = true;
  1947.         } else {
  1948.             RunTime.flipBook = new DoubleFlipBook();
  1949.             RunTime.singlePage = false;
  1950.         }
  1951.         RunTime.flipBook.zoom = js.Lib.document.getElementById("zoom");
  1952.         var bookleftpage = js.Lib.document.getElementById("leftpage");
  1953.         RunTime.flipBook.zoomLeftPage = bookleftpage;
  1954.         var bookrightpage = js.Lib.document.getElementById("rightpage");
  1955.         RunTime.flipBook.zoomRightPage = bookrightpage;
  1956.         var leftPageLock = js.Lib.document.getElementById("leftPageLock");
  1957.         var rightPageLock = js.Lib.document.getElementById("rightPageLock");
  1958.         RunTime.flipBook.leftPageLock = leftPageLock;
  1959.         RunTime.flipBook.rightPageLock = rightPageLock;
  1960.         RunTime.flipBook.root = js.Lib.document.getElementById("cvsBook");
  1961.         RunTime.flipBook.mask = js.Lib.document.getElementById("mask");
  1962.         RunTime.flipBook.tbPageCount = js.Lib.document.getElementById("tbPageCount");
  1963.         RunTime.flipBook.tbPage = js.Lib.document.getElementById("tbPage");
  1964.         RunTime.flipBook.btnContents = js.Lib.document.getElementById("btnContents");
  1965.         RunTime.flipBook.btnThumbs = js.Lib.document.getElementById("btnThumbs");
  1966.         RunTime.flipBook.btnSearch = js.Lib.document.getElementById("btnSearch");
  1967.         RunTime.flipBook.btnMask = js.Lib.document.getElementById("btnMask");
  1968.         RunTime.flipBook.btnBookMark = js.Lib.document.getElementById("btnBookMark");
  1969.         RunTime.flipBook.btnNote = js.Lib.document.getElementById("btnNote");
  1970.         RunTime.flipBook.btnPrevPage = js.Lib.document.getElementById("btnPrevPage");
  1971.         RunTime.flipBook.btnNextPage = js.Lib.document.getElementById("btnNextPage");
  1972.         RunTime.flipBook.btnFirstPage = js.Lib.document.getElementById("btnFirstPage");
  1973.         RunTime.flipBook.btnLastPage = js.Lib.document.getElementById("btnLastPage");
  1974.         RunTime.flipBook.btnAutoFlip = js.Lib.document.getElementById("btnAutoFlip");
  1975.         RunTime.flipBook.btnDownload = js.Lib.document.getElementById("btnDownload");
  1976.         RunTime.flipBook.btnEmail = js.Lib.document.getElementById("btnEmail");
  1977.         RunTime.flipBook.btnSns = js.Lib.document.getElementById("btnSns");
  1978.         RunTime.flipBook.btnShowTxt = js.Lib.document.getElementById("btnShowTxt");
  1979.         RunTime.flipBook.imgLogo = js.Lib.document.getElementById("imgLogo");
  1980.         RunTime.flipBook.topBar = js.Lib.document.getElementById("topBar");
  1981.         RunTime.flipBook.topBarContent = js.Lib.document.getElementById("topBarContent");
  1982.         RunTime.flipBook.topFullTextContent = js.Lib.document.getElementById("topFullTextContent");
  1983.         RunTime.flipBook.bottomBar = js.Lib.document.getElementById("bottomBar");
  1984.         RunTime.flipBook.bottomBarBg = js.Lib.document.getElementById("bottomBarBg");
  1985.         RunTime.flipBook.bottomBarBg.style.opacity = RunTime.bottomBarAlpha;
  1986.         RunTime.flipBook.topMenuBar = js.Lib.document.getElementById("topMenuBar");
  1987.         RunTime.flipBook.topMenuBarBg = js.Lib.document.getElementById("topMenuBarBg");
  1988.         RunTime.flipBook.topMenuBarBg.style.opacity = RunTime.bottomBarAlpha;
  1989.         RunTime.flipBook.topBarContent.style.zIndex = 10000;
  1990.         RunTime.flipBook.menuParent = js.Lib.document.getElementById("menuParent");
  1991.         RunTime.flipBook.maskPopup = js.Lib.document.getElementById("maskPopup");
  1992.         RunTime.flipBook.cvsSlideshow = js.Lib.document.getElementById("cvsSlideshow");
  1993.         RunTime.flipBook.cvsVideo = js.Lib.document.getElementById("cvsVideo");
  1994.         RunTime.flipBook.cvsOthers = js.Lib.document.getElementById("cvsOthers");
  1995.         RunTime.flipBook.cvsAudio = js.Lib.document.getElementById("cvsAudio");
  1996.         RunTime.flipBook.cvsLeftPageBgAudio = js.Lib.document.getElementById("cvsLeftPageBgAudio");
  1997.         RunTime.flipBook.cvsRightPageBgAudio = js.Lib.document.getElementById("cvsRightPageBgAudio");
  1998.         RunTime.flipBook.cvsYoutube = js.Lib.document.getElementById("cvsYoutube");
  1999.         RunTime.flipBook.btnZoom = js.Lib.document.getElementById("btnZoom");
  2000.         var left = (RunTime.clientWidth - 500) / 2 | 0;
  2001.         RunTime.flipBook.topBar.style.left = Std.string(left) + "px";
  2002.         var c = RunTime.flipBook.root;
  2003.         RunTime.flipBook.canvas = c;
  2004.         RunTime.flipBook.attachActions();
  2005.         c.width = RunTime.clientWidth;
  2006.         c.height = RunTime.clientHeight;
  2007.         if(RunTime.clientWidth < 800) {
  2008.             js.Lib.document.getElementById("btnFirstPage").style.marginLeft = "10px";
  2009.             js.Lib.document.getElementById("btnPrevPage").style.marginLeft = "10px";
  2010.             js.Lib.document.getElementById("btnNextPage").style.marginLeft = "10px";
  2011.             js.Lib.document.getElementById("btnLastPage").style.marginLeft = "10px";
  2012.         }
  2013.         var cvsButton = js.Lib.document.getElementById("cvsButton");
  2014.         RunTime.flipBook.cvsButton = cvsButton;
  2015.         cvsButton.width = RunTime.clientWidth;
  2016.         cvsButton.height = RunTime.clientHeight;
  2017.         var cvsHighLight = js.Lib.document.getElementById("cvsHighLight");
  2018.         RunTime.flipBook.cvsHighLight = cvsHighLight;
  2019.         cvsHighLight.width = RunTime.clientWidth;
  2020.         cvsHighLight.height = RunTime.clientHeight;
  2021.         var cvsNote = js.Lib.document.getElementById("cvsNote");
  2022.         RunTime.flipBook.cvsNote = cvsNote;
  2023.         cvsNote.width = RunTime.clientWidth;
  2024.         cvsNote.height = RunTime.clientHeight;
  2025.         RunTime.flipBook.zoom.style.width = RunTime.clientWidth + "px";
  2026.         RunTime.flipBook.zoom.style.height = RunTime.clientHeight + "px";
  2027.         RunTime.flipBook.afterInit();
  2028.         RunTime.flipBook.bookContext.ctx = RunTime.flipBook.getContext();
  2029.         RunTime.flipBook.bookContext.ctxButton = RunTime.flipBook.getButtonContext();
  2030.         RunTime.flipBook.bookContext.ctxHighLight = RunTime.flipBook.getHighLightContext();
  2031.         RunTime.flipBook.bookContext.ctxNote = RunTime.flipBook.getNoteContext();
  2032.         RunTime.requestLanguages(RunTime.requestBookInfo);
  2033.     });
  2034. }
  2035. RunTime.requestBookInfo = function() {
  2036.     orc.utils.Util.request(RunTime.urlBookinfo,function(data) {
  2037.         RunTime.bookInfo = Xml.parse(data);
  2038.         RunTime.loadBookInfo();
  2039.         RunTime.key = RunTime.calcKey(RunTime.book.pageWidth | 0,RunTime.book.pageHeight | 0);
  2040.         var defaultKey = "Pwd-Empty";
  2041.         if(RunTime.pcode.length > 0) defaultKey = RunTime.decode64(RunTime.pcode);
  2042.         var encode = RunTime.encryptKey(defaultKey,RunTime.key);
  2043.         if(encode == RunTime.book.password) {
  2044.             if(encode == RunTime.book.password && RunTime.pcode.length > 0) RunTime.bLocked = false;
  2045.             RunTime.afterRequestBookInfo();
  2046.         } else if(RunTime.book.lockPages != null) {
  2047.             if(RunTime.book.lockPages.length > 0) {
  2048.                 if(encode == RunTime.book.password && RunTime.pcode.length > 0) RunTime.bLocked = false;
  2049.                 RunTime.afterRequestBookInfo();
  2050.             }
  2051.         } else RunTime.InputPwd();
  2052.     });
  2053. }
  2054. RunTime.InputPwd = function() {
  2055.     RunTime.showPopupMaskLayer();
  2056.     RunTime.flipBook.cvsOthers.innerHTML = core.HtmlHelper.toInputPwdHtml();
  2057. }
  2058. RunTime.InputUnlock = function() {
  2059.     RunTime.showPopupMaskLayer();
  2060.     RunTime.flipBook.cvsOthers.innerHTML = core.HtmlHelper.toInputUnlockPwdHtml();
  2061. }
  2062. RunTime.tryPwd = function(pwd) {
  2063.     var encode = RunTime.encryptKey(pwd,RunTime.key);
  2064.     if(encode == RunTime.book.password) {
  2065.         RunTime.pcode = StringTools.urlEncode(RunTime.encode64(pwd,false));
  2066.         RunTime.afterRequestBookInfo();
  2067.     } else js.Lib.window.alert(L.s("PasswordError"));
  2068. }
  2069. RunTime.tryUnlock = function(pwd) {
  2070.     var encode = RunTime.encryptKey(pwd,RunTime.key);
  2071.     if(encode == RunTime.book.password) {
  2072.         RunTime.pcode = StringTools.urlEncode(RunTime.encode64(pwd,false));
  2073.         js.Lib.document.getElementById("inputBox").style.display = "none";
  2074.         RunTime.clearPopupContents();
  2075.         RunTime.bLocked = false;
  2076.         RunTime.flipBook.leftPageLock.style.display = "none";
  2077.         RunTime.flipBook.rightPageLock.style.display = "none";
  2078.         RunTime.flipBook.bookContext.render();
  2079.     } else js.Lib.window.alert(L.s("PasswordError"));
  2080. }
  2081. RunTime.afterRequestBookInfo = function() {
  2082.     RunTime.flipBook.cvsOthers.innerHTML = "";
  2083.     RunTime.clearPopupContents();
  2084.     RunTime.requestPages();
  2085.     RunTime.useAnalyticsUA(RunTime.book.analyticsUA,RunTime.book.bookId);
  2086. }
  2087. RunTime.requestPages = function() {
  2088.     orc.utils.Util.request(RunTime.urlPageInfo,function(data) {
  2089.         RunTime.pageInfo = Xml.parse(data);
  2090.         RunTime.loadPageInfo();
  2091.         RunTime.requestHotlinks();
  2092.         RunTime.requestSlideshow();
  2093.         RunTime.requestContents();
  2094.         RunTime.requestShare();
  2095.         RunTime.requestVideos();
  2096.         RunTime.reauestAudios();
  2097.         RunTime.requestButtons();
  2098.         RunTime.readLocalHighLights();
  2099.         RunTime.readLocalNotes();
  2100.         RunTime.readLocalBookmarks();
  2101.     });
  2102. }
  2103. RunTime.requestSlideshow = function(onSuccess) {
  2104.     orc.utils.Util.request(RunTime.urlSlideshow,function(data) {
  2105.         var dom = new DOMParser();
  2106.         var ctx = new Xml2Html();
  2107.         RunTime.slideshow = dom.parseFromString(ctx.prepareXmlAsHtml(data),"text/xml");
  2108.         RunTime.loadSlideshow(ctx);
  2109.         if(RunTime.flipBook != null) {
  2110.             RunTime.flipBook.loadCtxSlideshow();
  2111.             RunTime.flipBook.bookContext.render();
  2112.         }
  2113.         if(onSuccess != null) onSuccess();
  2114.     });
  2115. }
  2116. RunTime.requestHotlinks = function(onSuccess) {
  2117.     orc.utils.Util.request(RunTime.urlHotlinks,function(data) {
  2118.         var dom = new DOMParser();
  2119.         var ctx = new Xml2Html();
  2120.         RunTime.hotlinkInfo = dom.parseFromString(ctx.prepareXmlAsHtml(data),"text/xml");
  2121.         RunTime.loadHotlinks(ctx);
  2122.         if(RunTime.flipBook != null) {
  2123.             RunTime.flipBook.loadCtxHotlinks();
  2124.             RunTime.flipBook.bookContext.render();
  2125.         }
  2126.         if(onSuccess != null) onSuccess();
  2127.     });
  2128. }
  2129. RunTime.requestVideos = function(onSuccess) {
  2130.     orc.utils.Util.request(RunTime.urlVideos,function(data) {
  2131.         RunTime.videoInfo = Xml.parse(data);
  2132.         RunTime.loadVideos();
  2133.         if(RunTime.flipBook != null) {
  2134.             RunTime.flipBook.updateVideos();
  2135.             RunTime.flipBook.bookContext.render();
  2136.         }
  2137.         if(onSuccess != null) onSuccess();
  2138.     });
  2139. }
  2140. RunTime.reauestAudios = function(onSuccess) {
  2141.     orc.utils.Util.request(RunTime.urlAudios,function(data) {
  2142.         RunTime.audioInfo = Xml.parse(data);
  2143.         RunTime.loadAudios();
  2144.         if(RunTime.flipBook != null) RunTime.flipBook.updateAudios();
  2145.         if(onSuccess != null) onSuccess();
  2146.     });
  2147. }
  2148. RunTime.requestButtons = function(onSuccess) {
  2149.     orc.utils.Util.request(RunTime.urlButtons,function(data) {
  2150.         RunTime.buttonInfo = Xml.parse(data);
  2151.         RunTime.loadButtons();
  2152.         if(RunTime.flipBook != null) {
  2153.             RunTime.flipBook.loadCtxButtons();
  2154.             RunTime.flipBook.bookContext.render();
  2155.         }
  2156.         if(onSuccess != null) onSuccess();
  2157.     });
  2158. }
  2159. RunTime.requestContents = function() {
  2160.     orc.utils.Util.request(RunTime.urlContents,function(data) {
  2161.         RunTime.contentInfo = Xml.parse(data);
  2162.     });
  2163. }
  2164. RunTime.requestShare = function() {
  2165.     orc.utils.Util.request(RunTime.urlShareInfo,function(data) {
  2166.         RunTime.shareInfo = Xml.parse(data);
  2167.     });
  2168. }
  2169. RunTime.requestSearch = function(invoke) {
  2170.     orc.utils.Util.request(RunTime.urlSearch,function(data) {
  2171.         var dom = new DOMParser();
  2172.         var ctx = new Xml2Html();
  2173.         RunTime.searchInfo = dom.parseFromString(ctx.prepareXmlAsHtml(data),"text/xml");
  2174.         RunTime.loadPageContents(ctx);
  2175.         if(invoke != null) invoke(RunTime.book.pages);
  2176.     });
  2177. }
  2178. RunTime.invokePageContentsAction = function(invoke) {
  2179.     if(RunTime.searchInfo == null) RunTime.requestSearch(invoke); else invoke(RunTime.book.pages);
  2180. }
  2181. RunTime.loadPageContents = function(ctx) {
  2182.     if(RunTime.searchInfo == null) return;
  2183.     var dom = RunTime.searchInfo;
  2184.     var pages = dom.getElementsByTagName("page");
  2185.     var _g1 = 0, _g = pages.length;
  2186.     while(_g1 < _g) {
  2187.         var i = _g1++;
  2188.         var node = pages[i];
  2189.         var pageNumVal = node.getAttribute("pageNumber");
  2190.         var htmlText = null;
  2191.         var htmlTextDoms = node.getElementsByTagName("cdata");
  2192.         if(htmlTextDoms != null && htmlTextDoms.length > 0) {
  2193.             htmlText = StringTools.trim(htmlTextDoms[0].childNodes[0].nodeValue);
  2194.             htmlText = ctx.getCData(htmlText);
  2195.         }
  2196.         var _g3 = 0, _g2 = RunTime.book.pages.length;
  2197.         while(_g3 < _g2) {
  2198.             var k = _g3++;
  2199.             var page = RunTime.book.pages[k];
  2200.             if(page.id == pageNumVal) page.content = htmlText;
  2201.         }
  2202.     }
  2203. }
  2204. RunTime.reload = function() {
  2205.     js.Lib.window.location.href = RunTime.flipBook.getFullUrl();
  2206. }
  2207. RunTime.navigateUrl = function(url) {
  2208.     if(url == null || url == "null" || url == "") return;
  2209.     js.Lib.window.location.href = url;
  2210. }
  2211. RunTime.getBookInfo = function() {
  2212.     if(RunTime.bookInfo == null) return;
  2213.     var i = RunTime.bookInfo.elementsNamed("bookinfo");
  2214.     if(i.hasNext() == false) return;
  2215.     var node = i.next();
  2216.     RunTime.book.singlepageMode = node.get("singlepageMode") == "true"?true:false;
  2217.     RunTime.book.rightToLeft = node.get("rightToLeft") == "true"?true:false;
  2218.     RunTime.book.autoFlipSecond = Std.parseInt(node.get("autoFlipSeconds"));
  2219.     RunTime.book.gateway = node.get("gateway");
  2220.     RunTime.book.shareHref = node.get("shareUrl");
  2221. }
  2222. RunTime.loadBookInfo = function() {
  2223.     if(RunTime.bookInfo == null) return;
  2224.     var i = RunTime.bookInfo.elementsNamed("bookinfo");
  2225.     if(i.hasNext() == false) return;
  2226.     var node = i.next();
  2227.     var idVal = node.get("id");
  2228.     if(idVal == null) idVal = "";
  2229.     RunTime.book.bookId = idVal;
  2230.     RunTime.book.bookTitle = node.get("title");
  2231.     RunTime.book.bgColor = node.get("bgColor");
  2232.     RunTime.book.bgImageUrl = node.get("bgImage");
  2233.     RunTime.book.analyticsUA = node.get("analyticsUA");
  2234.     RunTime.book.password = node.get("password");
  2235.     RunTime.book.bookDownloadUrl = node.get("pdfUrl");
  2236.     var locked = node.get("protectedPages");
  2237.     if(locked != null && locked != "") RunTime.book.lockPages = locked.split(",");
  2238.     if(RunTime.book.bgColor == "" || RunTime.book.bgColor == null) RunTime.book.bgColor = "gray";
  2239.     if(RunTime.book.bgColor != "" && RunTime.book.bgColor != null) js.Lib.document.body.style.backgroundColor = RunTime.book.bgColor;
  2240.     if(RunTime.book.bgImageUrl != "" && RunTime.book.bgImageUrl != null) {
  2241.         js.Lib.document.body.style.backgroundImage = "url(" + RunTime.book.bgImageUrl + ")";
  2242.         js.Lib.document.body.style.backgroundRepeat = "no-repeat";
  2243.         js.Lib.document.body.style.backgroundPosition = "center";
  2244.         js.Lib.document.body.style.backgroundSize = "cover";
  2245.         js.Lib.document.body.style.backgroundClip = "border-box";
  2246.     }
  2247.     js.Lib.window.document.title = RunTime.book.bookTitle;
  2248.     var pageWidth = Std.parseFloat(node.get("pageWidth"));
  2249.     var pageHeight = Std.parseFloat(node.get("pageHeight"));
  2250.     RunTime.book.pageWidth = pageWidth;
  2251.     RunTime.book.pageHeight = pageHeight;
  2252.     var m = new orc.utils.ImageMetricHelper(pageWidth,pageHeight);
  2253.     var w = RunTime.clientWidth;
  2254.     var h = RunTime.clientHeight;
  2255.     var scale = m.getMaxFitScale(w,h);
  2256.     RunTime.defaultScale = scale;
  2257.     RunTime.imagePageWidth = pageWidth * scale;
  2258.     RunTime.imagePageHeight = pageHeight * scale;
  2259.     RunTime.pageScale = scale;
  2260.     var li = node.elementsNamed("bookLogo");
  2261.     if(li.hasNext() == true) {
  2262.         var lnode = li.next();
  2263.         RunTime.book.logoUrl = lnode.get("url");
  2264.         RunTime.book.logoHref = lnode.get("href");
  2265.     }
  2266.     if(RunTime.book.logoUrl != null && RunTime.book.logoUrl != "") {
  2267.         var hideLogo = false;
  2268.         if(RunTime.clientWidth < 600) hideLogo = true;
  2269.         if(js.Lib.window.navigator.userAgent.indexOf("iPhone") != -1) hideLogo = true;
  2270.         if(!hideLogo) {
  2271.             RunTime.flipBook.imgLogo.style.display = "inline";
  2272.             var obj = RunTime.flipBook.imgLogo;
  2273.             obj.src = RunTime.book.logoUrl;
  2274.             RunTime.flipBook.imgLogo.onclick = RunTime.onLogoClick;
  2275.         }
  2276.     }
  2277.     RunTime.flipBook.btnDownload.onclick = RunTime.onDownloadClick;
  2278.     var bottomMenuIter = node.elementsNamed("bottommenu");
  2279.     if(bottomMenuIter.hasNext() == true) {
  2280.         var bottomMenuNode = bottomMenuIter.next();
  2281.         RunTime.book.menuAutoFlipVisible = RunTime.getMenuVisible(bottomMenuNode,"autoflip");
  2282.         RunTime.book.menuSearchVisible = RunTime.getMenuVisible(bottomMenuNode,"search");
  2283.         RunTime.book.menuTxtVisible = RunTime.getMenuVisible(bottomMenuNode,"txt");
  2284.         RunTime.book.menuZoomVisible = RunTime.getMenuVisible(bottomMenuNode,"zoom");
  2285.         RunTime.book.menuBookmarkVisible = RunTime.getMenuVisible(bottomMenuNode,"bookmark");
  2286.         RunTime.book.menuNoteVisible = RunTime.getMenuVisible(bottomMenuNode,"notes");
  2287.         RunTime.book.menuHighlightVisible = RunTime.getMenuVisible(bottomMenuNode,"highlight");
  2288.     }
  2289.     var leftMenuIter = node.elementsNamed("leftmenu");
  2290.     if(leftMenuIter.hasNext() == true) {
  2291.         var leftMenuNode = leftMenuIter.next();
  2292.         RunTime.book.menuTocVisible = RunTime.getMenuVisible(leftMenuNode,"toc");
  2293.         RunTime.book.menuThumbsVisible = RunTime.getMenuVisible(leftMenuNode,"thumbs");
  2294.         RunTime.book.menuDownloadVisible = RunTime.getMenuEntirePDF(leftMenuNode,"pdf");
  2295.         RunTime.book.menuEmailVisible = RunTime.getMenuVisible(leftMenuNode,"email");
  2296.         RunTime.book.menuSnsVisible = RunTime.getMenuVisible(leftMenuNode,"sns");
  2297.     }
  2298.     RunTime.setMenuVisible(RunTime.flipBook.btnContents,RunTime.book.menuTocVisible);
  2299.     RunTime.setMenuVisible(RunTime.flipBook.btnThumbs,RunTime.book.menuThumbsVisible);
  2300.     RunTime.setMenuVisible(RunTime.flipBook.btnSearch,RunTime.book.menuSearchVisible);
  2301.     RunTime.setMenuVisible(RunTime.flipBook.btnAutoFlip,RunTime.book.menuAutoFlipVisible);
  2302.     RunTime.setMenuVisible(RunTime.flipBook.btnShowTxt,RunTime.book.menuTxtVisible);
  2303.     RunTime.setMenuVisible(RunTime.flipBook.btnZoom,false);
  2304.     RunTime.setMenuVisible(RunTime.flipBook.btnDownload,RunTime.book.menuDownloadVisible);
  2305.     RunTime.setMenuVisible(RunTime.flipBook.btnEmail,RunTime.book.menuEmailVisible);
  2306.     RunTime.setMenuVisible(RunTime.flipBook.btnSns,RunTime.book.menuSnsVisible);
  2307.     var menuCount = 0;
  2308.     if(RunTime.book.menuTocVisible) menuCount += 1;
  2309.     if(RunTime.book.menuThumbsVisible) menuCount += 1;
  2310.     if(RunTime.book.menuSearchVisible) menuCount += 1;
  2311.     if(RunTime.book.menuAutoFlipVisible) menuCount += 1;
  2312.     if(RunTime.book.menuTxtVisible) menuCount += 1;
  2313.     var hideIcon = false;
  2314.     if(RunTime.clientWidth < 480) hideIcon = true;
  2315.     if(js.Lib.window.navigator.userAgent.indexOf("iPhone") != -1 && RunTime.clientWidth < 480) hideIcon = true;
  2316.     if(hideIcon) {
  2317.         if(menuCount < 5) RunTime.setMenuVisible(RunTime.flipBook.btnMask,RunTime.book.menuHighlightVisible);
  2318.         if(RunTime.book.menuHighlightVisible) menuCount += 1;
  2319.         if(menuCount < 5) {
  2320.             RunTime.setMenuVisible(RunTime.flipBook.btnNote,RunTime.book.menuNoteVisible);
  2321.             menuCount += 1;
  2322.         }
  2323.         if(RunTime.book.menuNoteVisible) menuCount += 1;
  2324.         if(menuCount < 5) {
  2325.             RunTime.setMenuVisible(RunTime.flipBook.btnBookMark,RunTime.book.menuBookmarkVisible);
  2326.             menuCount += 1;
  2327.         }
  2328.     } else {
  2329.         RunTime.setMenuVisible(RunTime.flipBook.btnMask,RunTime.book.menuHighlightVisible);
  2330.         RunTime.setMenuVisible(RunTime.flipBook.btnNote,RunTime.book.menuNoteVisible);
  2331.         RunTime.setMenuVisible(RunTime.flipBook.btnBookMark,RunTime.book.menuBookmarkVisible);
  2332.     }
  2333.     RunTime.loadState();
  2334. }
  2335. RunTime.setMenuVisible = function(menu,visible) {
  2336.     if(visible == true) menu.style.display = "inline"; else RunTime.flipBook.menuParent.removeChild(menu);
  2337. }
  2338. RunTime.getMenuVisible = function(parent,nodeName) {
  2339.     var li = parent.elementsNamed(nodeName);
  2340.     if(li.hasNext() == true) {
  2341.         var lnode = li.next();
  2342.         if(lnode.get("visible") == "false") return false;
  2343.     }
  2344.     return true;
  2345. }
  2346. RunTime.getMenuEntirePDF = function(parent,nodeName) {
  2347.     var li = parent.elementsNamed(nodeName);
  2348.     if(li.hasNext() == true) {
  2349.         var lnode = li.next();
  2350.         if(lnode.get("entirePDF") == "true") return true;
  2351.     }
  2352.     return false;
  2353. }
  2354. RunTime.onLogoClick = function(e) {
  2355.     if(RunTime.book == null || RunTime.book.logoHref == null || RunTime.book.logoHref == "") return;
  2356.     js.Lib.window.location.href = RunTime.book.logoHref;
  2357. }
  2358. RunTime.onDownloadClick = function(e) {
  2359.     if(RunTime.book == null || RunTime.book.bookDownloadUrl == null || RunTime.book.bookDownloadUrl == "") return;
  2360.     js.Lib.window.location.href = RunTime.book.bookDownloadUrl;
  2361. }
  2362. RunTime.onSendEmail = function() {
  2363.     RunTime.sendEmailByService();
  2364. }
  2365. RunTime.sendEmailResult = function() {
  2366.     if(RunTime.sendService.responseText.length < 2) {
  2367.         js.Lib.alert(L.s("EmailSendSuccessful"));
  2368.         var tomail = js.Lib.window.document.getElementById("tomail");
  2369.         tomail.value = "";
  2370.         var frommail = js.Lib.window.document.getElementById("youremail");
  2371.         frommail.value = "";
  2372.         var n = js.Lib.window.document.getElementById("yname");
  2373.         n.value = "";
  2374.         var m = js.Lib.window.document.getElementById("sharemsg");
  2375.         m.value = "";
  2376.     } else js.Lib.alert(L.s("EmailSendFailed"));
  2377. }
  2378. RunTime.sendEmailByService = function() {
  2379.     var baseUrl = js.Lib.window.location.href.split("?")[0];
  2380.     baseUrl = baseUrl.substring(0,baseUrl.lastIndexOf("/"));
  2381.     var tomail = js.Lib.window.document.getElementById("tomail");
  2382.     var frommail = js.Lib.window.document.getElementById("youremail");
  2383.     var n = js.Lib.window.document.getElementById("yname");
  2384.     var subject = L.s("YourFriend","YourFirend") + Std.string(n.value) + L.s("ShareEmailTitle","ShareEmailTitle");
  2385.     js.Lib.window.document.getElementById("subject").setAttribute("value",subject);
  2386.     var m = js.Lib.window.document.getElementById("sharemsg");
  2387.     var msg = m.value;
  2388.     msg += "<br /> <br /> " + Std.string(n.value) + L.s("ShareEmailContent") + "<a href='" + RunTime.book.shareHref + "' target='_black'>" + RunTime.book.shareHref + "<a/>" + "<br /> <br />" + "<a href='" + RunTime.book.shareHref + "' target='_black'>" + "<img src='" + baseUrl + "/" + RunTime.book.pages[0].urlThumb + "' >" + "<a/>";
  2389.     RunTime.sendService = new XMLHttpRequest();
  2390.     var query = "tomail=" + Std.string(tomail.value) + "&frommail=" + Std.string(frommail.value) + "&subject=" + subject + "&message=" + msg;
  2391.     RunTime.sendService.open("get",RunTime.book.gateway + "?" + query,true);
  2392.     RunTime.sendService.onreadystatechange = RunTime.sendEmailResult;
  2393.     RunTime.sendService.send();
  2394. }
  2395. RunTime.sendEmailByForm = function() {
  2396.     var n = js.Lib.window.document.getElementById("yname");
  2397.     var subject = L.s("YourFriend","YourFirend") + Std.string(n.value) + L.s("ShareEmailTitle","ShareEmailTitle");
  2398.     js.Lib.window.document.getElementById("subject").setAttribute("value",subject);
  2399.     var m = js.Lib.window.document.getElementById("sharemsg");
  2400.     var msg = m.value;
  2401.     msg += "<br /> <br /> " + Std.string(n.value) + L.s("ShareEmailContent") + "<a href='" + RunTime.book.shareHref + "' target='_black'>" + RunTime.book.shareHref + "<a/>" + "<br /> <br />" + "<a href='" + RunTime.book.shareHref + "' target='_black'>" + "<img src='" + RunTime.book.pages[0].urlThumb + "' >" + "<a/>";
  2402.     var b = js.Lib.window.document.getElementById("sendEmail");
  2403.     b.submit();
  2404. }
  2405. RunTime.loadPageInfo = function() {
  2406.     if(RunTime.pageInfo == null) return;
  2407.     var root = RunTime.pageInfo.firstElement();
  2408.     var val = root.get("preload");
  2409.     if(val.toLowerCase() == "true") RunTime.enablePreload = true;
  2410.     var i = root.elementsNamed("page");
  2411.     var num = 0;
  2412.     var numDouble = 0.1;
  2413.     while(i.hasNext() == true) {
  2414.         var node = i.next();
  2415.         var id = node.get("id");
  2416.         var source = node.get("source");
  2417.         var medium = node.get("medium");
  2418.         var thumb = node.get("thumb");
  2419.         var canZoom = !(node.get("canZoom") == "false");
  2420.         var page = new core.Page();
  2421.         RunTime.book.pages.push(page);
  2422.         if(medium == null || medium == "") medium = "content/medium/page" + Std.string(num + 1) + ".jpg";
  2423.         page.id = id;
  2424.         page.num = num;
  2425.         page.numInDoubleMode = Math.round(numDouble) | 0;
  2426.         page.urlPage = RunTime.urlRoot + medium;
  2427.         page.urlBigPage = RunTime.urlRoot + source;
  2428.         page.urlThumb = RunTime.urlRoot + thumb;
  2429.         page.urlFullPage = RunTime.urlRoot + source;
  2430.         page.canZoom = canZoom;
  2431.         page.locked = RunTime.checkLocked(num + 1);
  2432.         numDouble += 0.5;
  2433.         num++;
  2434.     }
  2435.     RunTime.flipBook.setPageCount(RunTime.book.pages.length);
  2436.     RunTime.flipBook.setCurrentPage(RunTime.defaultPageNum + 1);
  2437.     RunTime.flipBook.loadPage(RunTime.defaultPageNum);
  2438. }
  2439. RunTime.checkLocked = function(num) {
  2440.     if(RunTime.book.lockPages == null || RunTime.book.lockPages.length == 0) return false;
  2441.     var _g1 = 0, _g = RunTime.book.lockPages.length;
  2442.     while(_g1 < _g) {
  2443.         var i = _g1++;
  2444.         if(Std.parseInt(RunTime.book.lockPages[i]) == num) return true;
  2445.     }
  2446.     return false;
  2447. }
  2448. RunTime.loadSlideshow = function(ctx) {
  2449.     if(RunTime.slideshow == null) return;
  2450.     var dom = RunTime.slideshow;
  2451.     var slides = dom.getElementsByTagName("slideshow");
  2452.     var _g1 = 0, _g = slides.length;
  2453.     while(_g1 < _g) {
  2454.         var i = _g1++;
  2455.         var node = slides[i];
  2456.         var pageNumVal = node.getAttribute("page");
  2457.         var xVal = node.getAttribute("x");
  2458.         var yVal = node.getAttribute("y");
  2459.         var widthVal = node.getAttribute("width");
  2460.         var heightVal = node.getAttribute("height");
  2461.         var timeVal = node.getAttribute("time");
  2462.         var transitionVal = node.getAttribute("transition");
  2463.         var idVal = node.getAttribute("sid");
  2464.         var bgColorVal = node.getAttribute("bgColor");
  2465.         var slideshowInfo = new core.SlideshowInfo();
  2466.         var pics = node.getElementsByTagName("pic");
  2467.         var _g3 = 0, _g2 = pics.length;
  2468.         while(_g3 < _g2) {
  2469.             var j = _g3++;
  2470.             var pnode = pics[j];
  2471.             var slide = new core.Slide();
  2472.             slide.url = RunTime.urlRoot + pnode.getAttribute("url");
  2473.             slide.href = pnode.getAttribute("href");
  2474.             slideshowInfo.slides.push(slide);
  2475.         }
  2476.         slideshowInfo.pageNum = Std.parseInt(pageNumVal) - 1;
  2477.         slideshowInfo.x = Std.parseFloat(xVal);
  2478.         slideshowInfo.y = Std.parseFloat(yVal);
  2479.         slideshowInfo.width = Std.parseFloat(widthVal);
  2480.         slideshowInfo.height = Std.parseFloat(heightVal);
  2481.         slideshowInfo.interval = timeVal;
  2482.         slideshowInfo.transition = transitionVal;
  2483.         slideshowInfo.id = idVal;
  2484.         slideshowInfo.bgColor = bgColorVal;
  2485.         RunTime.book.slideshows.push(slideshowInfo);
  2486.     }
  2487. }
  2488. RunTime.loadHotlinks = function(ctx) {
  2489.     if(RunTime.hotlinkInfo == null) return;
  2490.     var dom = RunTime.hotlinkInfo;
  2491.     var links = dom.getElementsByTagName("hotlink");
  2492.     var _g1 = 0, _g = links.length;
  2493.     while(_g1 < _g) {
  2494.         var i = _g1++;
  2495.         var node = links[i];
  2496.         var pageNumVal = node.getAttribute("page");
  2497.         var xVal = node.getAttribute("x");
  2498.         var yVal = node.getAttribute("y");
  2499.         var widthVal = node.getAttribute("width");
  2500.         var heightVal = node.getAttribute("height");
  2501.         var colorVal = node.getAttribute("color");
  2502.         var opacityVal = node.getAttribute("opacity");
  2503.         var destinationVal = node.getAttribute("destination");
  2504.         var typeVal = node.getAttribute("type");
  2505.         var popupWidthVal = node.getAttribute("popupWidth");
  2506.         var popupHeightVal = node.getAttribute("popupHeight");
  2507.         var youtubeIdVal = node.getAttribute("youtubeId");
  2508.         var htmlText = null;
  2509.         var htmlTextDoms = node.getElementsByTagName("cdata");
  2510.         if(htmlTextDoms != null && htmlTextDoms.length > 0) {
  2511.             htmlText = StringTools.trim(htmlTextDoms[0].childNodes[0].nodeValue);
  2512.             htmlText = ctx.getCData(htmlText);
  2513.         }
  2514.         var link = new core.HotLink();
  2515.         link.pageNum = Std.parseInt(pageNumVal) - 1;
  2516.         link.x = Std.parseFloat(xVal);
  2517.         link.y = Std.parseFloat(yVal);
  2518.         link.width = Std.parseFloat(widthVal);
  2519.         link.height = Std.parseFloat(heightVal);
  2520.         link.htmlText = htmlText;
  2521.         if(popupWidthVal != null) link.popupWidth = Std.parseInt(popupWidthVal);
  2522.         if(popupHeightVal != null) link.popupHeight = Std.parseInt(popupHeightVal);
  2523.         link.youtubeId = youtubeIdVal;
  2524.         link.type = typeVal == null?"":typeVal;
  2525.         if(colorVal != null) {
  2526.             colorVal = StringTools.replace(colorVal,"0x","#");
  2527.             colorVal = StringTools.replace(colorVal,"0X","#");
  2528.             link.color = colorVal;
  2529.         }
  2530.         if(opacityVal != null) link.opacity = Std.parseFloat(opacityVal);
  2531.         if(destinationVal != null) link.destination = destinationVal;
  2532.         RunTime.book.hotlinks.push(link);
  2533.     }
  2534. }
  2535. RunTime.loadVideos = function() {
  2536.     if(RunTime.videoInfo == null) return;
  2537.     var index = 0;
  2538.     var i = RunTime.videoInfo.firstElement().elementsNamed("video");
  2539.     while(i.hasNext() == true) {
  2540.         var node = i.next();
  2541.         var pageNumVal = node.get("page");
  2542.         var xVal = node.get("x");
  2543.         var yVal = node.get("y");
  2544.         var widthVal = node.get("width");
  2545.         var heightVal = node.get("height");
  2546.         var autoPlayVal = node.get("autoPlay");
  2547.         var showControlVal = node.get("showControl");
  2548.         var autoRepeatVal = node.get("autoRepeat");
  2549.         var urlVal = node.get("url");
  2550.         var youtubeIdVal = node.get("youtubeId");
  2551.         var video = new core.VideoInfo();
  2552.         video.pageNum = Std.parseInt(pageNumVal) - 1;
  2553.         video.x = Std.parseFloat(xVal);
  2554.         video.y = Std.parseFloat(yVal);
  2555.         video.width = Std.parseFloat(widthVal);
  2556.         video.height = Std.parseFloat(heightVal);
  2557.         video.autoPlay = autoPlayVal == "true";
  2558.         video.showControl = showControlVal == "true";
  2559.         video.autoRepeat = autoRepeatVal == "true";
  2560.         video.url = RunTime.urlRoot + urlVal;
  2561.         video.youtubeId = youtubeIdVal;
  2562.         video.id = "video_embed_" + Std.string(index);
  2563.         RunTime.book.videos.push(video);
  2564.         index++;
  2565.     }
  2566. }
  2567. RunTime.loadAudios = function() {
  2568.     if(RunTime.audioInfo == null) return;
  2569.     var index = 0;
  2570.     var i = RunTime.audioInfo.firstElement().elementsNamed("pages");
  2571.     if(i.hasNext() == true) {
  2572.         var index1 = 0;
  2573.         i = i.next().elementsNamed("sound");
  2574.         while(i.hasNext() == true) {
  2575.             var node = i.next();
  2576.             var pageNumVal = node.get("pageNumber");
  2577.             var urlVal = node.get("url");
  2578.             var audio = new core.AudioInfo();
  2579.             audio.url = RunTime.urlRoot + urlVal;
  2580.             audio.pageNum = Std.parseInt(pageNumVal) - 1;
  2581.             audio.id = "audio_embed_" + Std.string(index1);
  2582.             index1++;
  2583.             RunTime.book.audios.push(audio);
  2584.         }
  2585.     }
  2586. }
  2587. RunTime.extractCData = function(txt) {
  2588.     if(txt == null) return null;
  2589.     var first = txt.indexOf("<![CDATA[");
  2590.     var last = txt.lastIndexOf("]]>");
  2591.     if(first < 0 || last < 0 || last < first) return null;
  2592.     return HxOverrides.substr(txt,first + "<![CDATA[".length,last - first - "<![CDATA[".length);
  2593. }
  2594. RunTime.loadButtons = function() {
  2595.     if(RunTime.buttonInfo == null) return;
  2596.     var i = RunTime.buttonInfo.firstElement().elementsNamed("button");
  2597.     while(i.hasNext() == true) {
  2598.         var node = i.next();
  2599.         var pageNumVal = node.get("page");
  2600.         var xVal = node.get("x");
  2601.         var yVal = node.get("y");
  2602.         var widthVal = node.get("width");
  2603.         var heightVal = node.get("height");
  2604.         var imageVal = node.get("image");
  2605.         var typeVal = node.get("type");
  2606.         var popupWidthVal = node.get("popupWidth");
  2607.         var popupHeightVal = node.get("popupHeight");
  2608.         var youtubeIdVal = node.get("youtubeId");
  2609.         var destinationVal = node.get("destination");
  2610.         var layer = node.get("layer");
  2611.         var textVal = "";
  2612.         var fontColorVal = "";
  2613.         var fontSizeVal = "";
  2614.         if(node.get("text") != null) textVal = node.get("text");
  2615.         if(node.get("fontColor") != null) fontColorVal = node.get("fontColor");
  2616.         if(node.get("fontSize") != null) fontSizeVal = node.get("fontSize");
  2617.         var htmlText = RunTime.extractCData(node.toString());
  2618.         var item = new core.ButtonInfo();
  2619.         item.pageNum = Std.parseInt(pageNumVal) - 1;
  2620.         item.x = Std.parseFloat(xVal);
  2621.         item.y = Std.parseFloat(yVal);
  2622.         item.width = Std.parseFloat(widthVal);
  2623.         item.height = Std.parseFloat(heightVal);
  2624.         item.layer = layer == null?"onpage":layer;
  2625.         item.htmlText = htmlText;
  2626.         if(popupWidthVal != null) item.popupWidth = Std.parseInt(popupWidthVal);
  2627.         if(popupHeightVal != null) item.popupHeight = Std.parseInt(popupHeightVal);
  2628.         item.youtubeId = youtubeIdVal;
  2629.         item.destination = destinationVal;
  2630.         item.type = typeVal == null?"":typeVal;
  2631.         item.image = imageVal;
  2632.         item.text = textVal;
  2633.         if(fontColorVal != "") item.fontColor = fontColorVal;
  2634.         if(fontSizeVal != "") item.fontSize = fontSizeVal;
  2635.         RunTime.book.buttons.push(item);
  2636.     }
  2637. }
  2638. RunTime.getInputAndJumpToPage = function() {
  2639.     RunTime.flipBook.stopFlip();
  2640.     var t = RunTime.flipBook.tbPage;
  2641.     var val = t.value;
  2642.     val = StringTools.trim(val);
  2643.     var num = RunTime.flipBook.currentPageNum;
  2644.     if(val != "") num = Std.parseInt(val) - 1;
  2645.     if(num < 0) num = 0; else if(num > RunTime.book.pages.length - 1) num = RunTime.book.pages.length - 1;
  2646.     RunTime.flipBook.tbPage.setAttribute("value",Std.string(num + 1));
  2647.     RunTime.flipBook.turnToPage(num);
  2648.     RunTime.flipBook.tbPage.blur();
  2649. }
  2650. RunTime.getPage = function(currentPageNum,pageOffset,useNewDrawParams) {
  2651.     if(useNewDrawParams == null) useNewDrawParams = true;
  2652.     if(pageOffset == null) pageOffset = 0;
  2653.     if(RunTime.book == null || RunTime.book.pages == null) return null;
  2654.     var num = currentPageNum + pageOffset;
  2655.     if(num < 0 || num > RunTime.book.pages.length - 1) return null;
  2656.     var page = RunTime.book.pages[num];
  2657.     page.pageOffset = pageOffset;
  2658.     if(useNewDrawParams == true) page.drawParams = RunTime.getDrawParams();
  2659.     if(RunTime.singlePage) {
  2660.         RunTime.flipBook.zoomLeftPage.width = page.drawParams.dw | 0;
  2661.         RunTime.flipBook.zoomLeftPage.height = page.drawParams.dh | 0;
  2662.         RunTime.flipBook.zoomLeftPage.style.left = Std.string(page.drawParams.dx) + "px";
  2663.         RunTime.flipBook.zoomLeftPage.style.top = Std.string(page.drawParams.dy) + "px";
  2664.         RunTime.flipBook.leftPageLock.style.width = (page.drawParams.dw | 0) + "px";
  2665.         RunTime.flipBook.leftPageLock.style.height = (page.drawParams.dh | 0) + "px";
  2666.         RunTime.flipBook.leftPageLock.style.left = Std.string(page.drawParams.dx) + "px";
  2667.         RunTime.flipBook.leftPageLock.style.top = Std.string(page.drawParams.dy) + "px";
  2668.     }
  2669.     return page;
  2670. }
  2671. RunTime.getDrawParams = function(layout) {
  2672.     if(layout == null) layout = 0;
  2673.     var dp = new core.DrawParams();
  2674.     var im = new orc.utils.ImageMetricHelper(RunTime.book.pageWidth,RunTime.book.pageHeight);
  2675.     var cw = RunTime.clientWidth;
  2676.     if(layout != 0) cw = 0.5 * cw;
  2677.     var ch = RunTime.clientHeight;
  2678.     var scale = im.getMaxFitScale(cw,ch);
  2679.     var dw = scale * RunTime.book.pageWidth;
  2680.     var dh = scale * RunTime.book.pageHeight;
  2681.     var dx = 0.5 * (cw - dw);
  2682.     if(layout != 0) {
  2683.         if(RunTime.book.rightToLeft) dx = layout > 0?cw - dw:cw; else dx = layout < 0?cw - dw:cw;
  2684.     }
  2685.     var dy = 0.5 * (ch - dh);
  2686.     var sx = 0;
  2687.     var sy = 0;
  2688.     var sw = RunTime.book.pageWidth;
  2689.     var sh = RunTime.book.pageHeight;
  2690.     dp.sx = sx;
  2691.     dp.sy = sy;
  2692.     dp.sw = sw;
  2693.     dp.sh = sh;
  2694.     dp.dx = dx;
  2695.     dp.dy = dy;
  2696.     dp.dw = dw;
  2697.     dp.dh = dh;
  2698.     return dp;
  2699. }
  2700. RunTime.getGolobaDrawParams = function() {
  2701.     var dp = new core.DrawParams();
  2702.     var im = new orc.utils.ImageMetricHelper(RunTime.book.pageWidth * 2,RunTime.book.pageHeight);
  2703.     var cw = RunTime.clientWidth;
  2704.     var ch = RunTime.clientHeight;
  2705.     var scale = im.getMaxFitScale(cw,ch);
  2706.     var dw = scale * RunTime.book.pageWidth * 2;
  2707.     var dh = scale * RunTime.book.pageHeight;
  2708.     var dx = 0.5 * (cw - dw) * 2;
  2709.     var dy = 0.5 * (ch - dh) * 2;
  2710.     var sx = 0;
  2711.     var sy = 0;
  2712.     var sw = RunTime.book.pageWidth * 2;
  2713.     var sh = RunTime.book.pageHeight;
  2714.     dp.sx = sx;
  2715.     dp.sy = sy;
  2716.     dp.sw = sw;
  2717.     dp.sh = sh;
  2718.     dp.dx = dx;
  2719.     dp.dy = dy;
  2720.     dp.dw = dw;
  2721.     dp.dh = dh;
  2722.     return dp;
  2723. }
  2724. RunTime.saveLocal = function(key,val) {
  2725. }
  2726. RunTime.getLocal = function(key) {
  2727.     return "";
  2728. }
  2729. RunTime.setUpdateFlag = function(bookId) {
  2730.     var prefix = bookId == null?RunTime.book.bookId:bookId;
  2731.     RunTime.saveLocal(prefix + "-" + "uploadFlag","1");
  2732. }
  2733. RunTime.getAndResetUpdateFlag = function() {
  2734.     var val = RunTime.getLocal(RunTime.book.bookId + "-" + "uploadFlag");
  2735.     RunTime.saveLocal(RunTime.book.bookId + "-" + "uploadFlag","");
  2736.     return val == "1";
  2737. }
  2738. RunTime.saveCurrentPageNum = function() {
  2739.     RunTime.savePageNum(Std.string(RunTime.flipBook.getCurrentPageNum()));
  2740. }
  2741. RunTime.savePageNum = function(val,bookId) {
  2742.     var prefix = bookId == null?RunTime.book.bookId:bookId;
  2743.     RunTime.saveLocal(prefix + "-" + "page",val);
  2744. }
  2745. RunTime.getAndResetSavedPageNum = function() {
  2746.     var val = RunTime.getLocal(RunTime.book.bookId + "-" + "page");
  2747.     RunTime.savePageNum("");
  2748.     if(val == null || val == "") return 0; else return Std.parseInt(val);
  2749. }
  2750. RunTime.saveBottomBarVisible = function(val) {
  2751.     if(val == true) RunTime.saveLocal(RunTime.book.bookId + "-" + "bottomBarVisible","true"); else RunTime.saveLocal(RunTime.book.bookId + "-" + "bottomBarVisible","false");
  2752. }
  2753. RunTime.getBottomBarVisible = function() {
  2754.     return RunTime.getLocal(RunTime.book.bookId + "-" + "bottomBarVisible") == "true";
  2755. }
  2756. RunTime.encrypt = function(src) {
  2757.     return RunTime.encryptKey(src,RunTime.key);
  2758. }
  2759. RunTime.encryptKey = function(src,key) {
  2760.     var n = 0;
  2761.     var rtn = "";
  2762.     var _g1 = 0, _g = src.length - 1;
  2763.     while(_g1 < _g) {
  2764.         var i = _g1++;
  2765.         var c = HxOverrides.cca(src,i) + HxOverrides.cca(key,n);
  2766.         var s = String.fromCharCode(c);
  2767.         rtn += s;
  2768.         n++;
  2769.         if(n >= key.length - 1) n = 0;
  2770.     }
  2771.     if(src.length > 0) rtn = rtn + HxOverrides.substr(src,src.length - 1,null);
  2772.     return RunTime.encode64(rtn);
  2773. }
  2774. RunTime.encode64 = function(txt,padding) {
  2775.     if(padding == null) padding = true;
  2776.     var bytes = haxe.io.Bytes.alloc(txt.length);
  2777.     var _g1 = 0, _g = txt.length;
  2778.     while(_g1 < _g) {
  2779.         var i = _g1++;
  2780.         var c = txt.charCodeAt(i);
  2781.         bytes.b[i] = c & 255;
  2782.     }
  2783.     var c = new haxe.BaseCode(haxe.io.Bytes.ofString("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"));
  2784.     var base64 = c.encodeBytes(bytes).toString();
  2785.     if(padding == true) {
  2786.         var remainder = base64.length % 4;
  2787.         if(remainder > 1) base64 += "=";
  2788.         if(remainder == 2) base64 += "=";
  2789.     }
  2790.     return base64;
  2791. }
  2792. RunTime.decode64 = function(txt) {
  2793.     var paddingSize = -1;
  2794.     if(txt.charAt(txt.length - 2) == "=") paddingSize = 2; else if(txt.charAt(txt.length - 1) == "=") paddingSize = 1;
  2795.     if(paddingSize != -1) txt = HxOverrides.substr(txt,0,txt.length - paddingSize);
  2796.     var c = new haxe.BaseCode(haxe.io.Bytes.ofString("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"));
  2797.     return c.decodeString(txt);
  2798. }
  2799. RunTime.calcKey = function(w,h) {
  2800.     var val = Std.string(w * h);
  2801.     val = HxOverrides.substr(val,val.length - 3,null) + HxOverrides.substr(val,0,2);
  2802.     var n = "";
  2803.     var _g1 = 0, _g = val.length;
  2804.     while(_g1 < _g) {
  2805.         var i = _g1++;
  2806.         var c = HxOverrides.cca(val,i) / 2 | 0;
  2807.         n = n + StringTools.hex(c);
  2808.     }
  2809.     return n.toUpperCase();
  2810. }
  2811. RunTime.clearPopupContents = function() {
  2812.     js.Lib.document.getElementById("maskPopup").style.display = "none";
  2813.     js.Lib.document.getElementById("cvsOthers").innerHTML = "";
  2814.     RunTime.flipBook.resetNoteButton();
  2815.     RunTime.flipBook.resetHighlightButton();
  2816. }
  2817. RunTime.isPopupModal = function() {
  2818.     return js.Lib.document.getElementById("maskPopup").style.display == "none"?false:true;
  2819. }
  2820. RunTime.clearAudio = function() {
  2821.     js.Lib.document.getElementById("cvsAudio").innerHTML = "";
  2822. }
  2823. RunTime.clearBgAudio = function() {
  2824.     RunTime.clearLeftBgAudio();
  2825.     RunTime.clearRightBgAudio();
  2826. }
  2827. RunTime.clearLeftBgAudio = function() {
  2828.     js.Lib.document.getElementById("cvsLeftPageBgAudio").innerHTML = "";
  2829. }
  2830. RunTime.clearRightBgAudio = function() {
  2831.     js.Lib.document.getElementById("cvsRightPageBgAudio").innerHTML = "";
  2832. }
  2833. RunTime.showPopupMaskLayer = function() {
  2834.     js.Lib.document.getElementById("maskPopup").style.display = "inline";
  2835. }
  2836. RunTime.playAudio = function() {
  2837.     var item = js.Lib.document.getElementById("cvsAudio").getElementsByTagName("audio")[0];
  2838.     item.play();
  2839. }
  2840. RunTime.playVideo = function() {
  2841.     var item = js.Lib.document.getElementById("cvsOthers").getElementsByTagName("video")[0];
  2842.     item.play();
  2843. }
  2844. RunTime.setOffset = function(dom,left,top) {
  2845.     var l = Math.round(left);
  2846.     var t = Math.round(top);
  2847.     dom.style.left = Std.string(l) + "px";
  2848.     dom.style.top = Std.string(t) + "px";
  2849. }
  2850. RunTime.useAnalyticsUA = function(ua,id) {
  2851.     if(RunTime.isNullOrEmpty(ua)) return;
  2852.     RunTime.trackerId = id;
  2853.     var gat = _gat;
  2854.     RunTime.tracker = gat._getTracker(ua);
  2855.     RunTime.tracker._initData();
  2856. }
  2857. RunTime.log = function(action,msg) {
  2858.     if(RunTime.isNullOrEmpty(msg)) return;
  2859.     if(RunTime.useGoogleUaAsLogViewer == false) {
  2860.         js.Lib.alert(action + ":" + msg);
  2861.         return;
  2862.     }
  2863.     if(RunTime.tracker) RunTime.tracker._trackPageview(RunTime.trackerId + "/" + action + "/" + msg);
  2864. }
  2865. RunTime.logPageView = function(pageNum) {
  2866.     if(pageNum > 0) RunTime.log("page",Std.string(pageNum));
  2867. }
  2868. RunTime.logClickLink = function(url,url2) {
  2869.     if(RunTime.isNullOrEmpty(url) && RunTime.isNullOrEmpty(url2)) return;
  2870.     RunTime.log("link",RunTime.isNullOrEmpty(url) == false?url:url2);
  2871. }
  2872. RunTime.logVideoView = function(url,url2) {
  2873.     if(RunTime.isNullOrEmpty(url) && RunTime.isNullOrEmpty(url2)) return;
  2874.     url = RunTime.removePrefix(url);
  2875.     RunTime.log("video",RunTime.isNullOrEmpty(url) == false?url:url2);
  2876. }
  2877. RunTime.isNullOrEmpty = function(txt) {
  2878.     return txt == null || txt == "" || txt == "undefined";
  2879. }
  2880. RunTime.logAudioView = function(url) {
  2881.     if(url == null || url == "") return;
  2882.     url = RunTime.removePrefix(url);
  2883.     RunTime.log("audio",url);
  2884. }
  2885. RunTime.logSearch = function(keyword) {
  2886.     if(keyword == null || keyword == "") return;
  2887.     RunTime.log("search",keyword);
  2888. }
  2889. RunTime.removePrefix = function(url) {
  2890.     if(url == null || url == "") return url; else if(url.indexOf("http") == 0) return url; else {
  2891.         var i = url.lastIndexOf("/");
  2892.         return HxOverrides.substr(url,i + 1,null);
  2893.     }
  2894. }
  2895. RunTime.readLocalBookmarks = function() {
  2896.     var bookmarks = new Array();
  2897.     var i = 0;
  2898.     var _g1 = 0, _g = localStorage.length;
  2899.     while(_g1 < _g) {
  2900.         var i1 = _g1++;
  2901.         var szKey = localStorage.key(i1);
  2902.         if(szKey.indexOf(RunTime.kvPrex) == 0) {
  2903.             if(szKey.indexOf("@$bm$@") != -1) {
  2904.                 var bookmark = new core.Bookmark();
  2905.                 bookmark.fillData(szKey,localStorage.getItem(szKey));
  2906.                 bookmarks.push(bookmark);
  2907.                 RunTime.book.bookmarks.push(bookmark);
  2908.             }
  2909.         }
  2910.     }
  2911.     return bookmarks;
  2912. }
  2913. RunTime.readLocalHighLights = function() {
  2914.     var highlights = new Array();
  2915.     var i = 0;
  2916.     var _g1 = 0, _g = localStorage.length;
  2917.     while(_g1 < _g) {
  2918.         var i1 = _g1++;
  2919.         var szKey = localStorage.key(i1);
  2920.         if(szKey.indexOf(RunTime.kvPrex) == 0) {
  2921.             if(szKey.indexOf("@$ht$@") != -1) {
  2922.                 var highlight = new core.HighLight();
  2923.                 highlight.fillData(szKey,localStorage.getItem(szKey));
  2924.                 highlights.push(highlight);
  2925.                 RunTime.book.highlights.push(highlight);
  2926.             }
  2927.         }
  2928.     }
  2929.     RunTime.highLights = highlights;
  2930.     if(RunTime.flipBook != null) {
  2931.         RunTime.flipBook.loadCtxHighLights();
  2932.         RunTime.flipBook.bookContext.render();
  2933.     }
  2934.     return highlights;
  2935. }
  2936. RunTime.updateHighLightNote = function(text) {
  2937.     if(RunTime.currentHighLight != null) {
  2938.         RunTime.currentHighLight.updateText(text);
  2939.         RunTime.flipBook.resetHighlightButton();
  2940.     }
  2941. }
  2942. RunTime.deleteHighLight = function() {
  2943.     if(RunTime.currentHighLight != null) {
  2944.         RunTime.currentHighLight.remove();
  2945.         HxOverrides.remove(RunTime.book.highlights,RunTime.currentHighLight);
  2946.         RunTime.currentHighLight = null;
  2947.         RunTime.flipBook.loadCtxHighLights();
  2948.         RunTime.flipBook.bookContext.render();
  2949.         RunTime.flipBook.resetHighlightButton();
  2950.     }
  2951. }
  2952. RunTime.readLocalNotes = function() {
  2953.     var notes = new Array();
  2954.     var i = 0;
  2955.     var _g1 = 0, _g = localStorage.length;
  2956.     while(_g1 < _g) {
  2957.         var i1 = _g1++;
  2958.         var szKey = localStorage.key(i1);
  2959.         if(szKey.indexOf(RunTime.kvPrex) == 0) {
  2960.             if(szKey.indexOf("@$ni$@") != -1) {
  2961.                 var note = new core.NoteIcon();
  2962.                 note.fillData(szKey,localStorage.getItem(szKey));
  2963.                 notes.push(note);
  2964.                 RunTime.book.notes.push(note);
  2965.             }
  2966.         }
  2967.     }
  2968.     RunTime.notes = notes;
  2969.     if(RunTime.flipBook != null) {
  2970.         RunTime.flipBook.loadCtxNotes();
  2971.         RunTime.flipBook.bookContext.render();
  2972.     }
  2973.     return notes;
  2974. }
  2975. RunTime.updateNote = function(text) {
  2976.     if(RunTime.currentNote != null) {
  2977.         RunTime.currentNote.updateText(text);
  2978.         RunTime.flipBook.resetNoteButton();
  2979.     }
  2980. }
  2981. RunTime.deleteNote = function() {
  2982.     if(RunTime.currentNote != null) {
  2983.         RunTime.currentNote.remove();
  2984.         HxOverrides.remove(RunTime.book.notes,RunTime.currentNote);
  2985.         RunTime.currentNote = null;
  2986.         RunTime.flipBook.loadCtxNotes();
  2987.         RunTime.flipBook.bookContext.render();
  2988.         RunTime.flipBook.resetNoteButton();
  2989.     }
  2990. }
  2991. RunTime.resizeSlide = function(p1,p2,p3,p4,p5) {
  2992.     var scale = p3 / p1.height;
  2993.     var leftVal = (p2 - p1.width * scale) / 2;
  2994.     js.Lib.document.getElementById(p4).style.width = (p1.width * scale | 0) + "px";
  2995.     js.Lib.document.getElementById(p4).style.marginLeft = leftVal + "px";
  2996. }
  2997. var Std = function() { }
  2998. Std.__name__ = true;
  2999. Std["is"] = function(v,t) {
  3000.     return js.Boot.__instanceof(v,t);
  3001. }
  3002. Std.string = function(s) {
  3003.     return js.Boot.__string_rec(s,"");
  3004. }
  3005. Std["int"] = function(x) {
  3006.     return x | 0;
  3007. }
  3008. Std.parseInt = function(x) {
  3009.     var v = parseInt(x,10);
  3010.     if(v == 0 && (HxOverrides.cca(x,1) == 120 || HxOverrides.cca(x,1) == 88)) v = parseInt(x);
  3011.     if(isNaN(v)) return null;
  3012.     return v;
  3013. }
  3014. Std.parseFloat = function(x) {
  3015.     return parseFloat(x);
  3016. }
  3017. Std.random = function(x) {
  3018.     return Math.floor(Math.random() * x);
  3019. }
  3020. var StringBuf = function() {
  3021.     this.b = "";
  3022. };
  3023. StringBuf.__name__ = true;
  3024. StringBuf.prototype = {
  3025.     toString: function() {
  3026.         return this.b;
  3027.     }
  3028.     ,addSub: function(s,pos,len) {
  3029.         this.b += HxOverrides.substr(s,pos,len);
  3030.     }
  3031.     ,addChar: function(c) {
  3032.         this.b += String.fromCharCode(c);
  3033.     }
  3034.     ,add: function(x) {
  3035.         this.b += Std.string(x);
  3036.     }
  3037.     ,__class__: StringBuf
  3038. }
  3039. var StringTools = function() { }
  3040. StringTools.__name__ = true;
  3041. StringTools.urlEncode = function(s) {
  3042.     return encodeURIComponent(s);
  3043. }
  3044. StringTools.urlDecode = function(s) {
  3045.     return decodeURIComponent(s.split("+").join(" "));
  3046. }
  3047. StringTools.htmlEscape = function(s) {
  3048.     return s.split("&").join("&").split("<").join("<").split(">").join(">");
  3049. }
  3050. StringTools.htmlUnescape = function(s) {
  3051.     return s.split(">").join(">").split("<").join("<").split("&").join("&");
  3052. }
  3053. StringTools.startsWith = function(s,start) {
  3054.     return s.length >= start.length && HxOverrides.substr(s,0,start.length) == start;
  3055. }
  3056. StringTools.endsWith = function(s,end) {
  3057.     var elen = end.length;
  3058.     var slen = s.length;
  3059.     return slen >= elen && HxOverrides.substr(s,slen - elen,elen) == end;
  3060. }
  3061. StringTools.isSpace = function(s,pos) {
  3062.     var c = HxOverrides.cca(s,pos);
  3063.     return c >= 9 && c <= 13 || c == 32;
  3064. }
  3065. StringTools.ltrim = function(s) {
  3066.     var l = s.length;
  3067.     var r = 0;
  3068.     while(r < l && StringTools.isSpace(s,r)) r++;
  3069.     if(r > 0) return HxOverrides.substr(s,r,l - r); else return s;
  3070. }
  3071. StringTools.rtrim = function(s) {
  3072.     var l = s.length;
  3073.     var r = 0;
  3074.     while(r < l && StringTools.isSpace(s,l - r - 1)) r++;
  3075.     if(r > 0) return HxOverrides.substr(s,0,l - r); else return s;
  3076. }
  3077. StringTools.trim = function(s) {
  3078.     return StringTools.ltrim(StringTools.rtrim(s));
  3079. }
  3080. StringTools.rpad = function(s,c,l) {
  3081.     var sl = s.length;
  3082.     var cl = c.length;
  3083.     while(sl < l) if(l - sl < cl) {
  3084.         s += HxOverrides.substr(c,0,l - sl);
  3085.         sl = l;
  3086.     } else {
  3087.         s += c;
  3088.         sl += cl;
  3089.     }
  3090.     return s;
  3091. }
  3092. StringTools.lpad = function(s,c,l) {
  3093.     var ns = "";
  3094.     var sl = s.length;
  3095.     if(sl >= l) return s;
  3096.     var cl = c.length;
  3097.     while(sl < l) if(l - sl < cl) {
  3098.         ns += HxOverrides.substr(c,0,l - sl);
  3099.         sl = l;
  3100.     } else {
  3101.         ns += c;
  3102.         sl += cl;
  3103.     }
  3104.     return ns + s;
  3105. }
  3106. StringTools.replace = function(s,sub,by) {
  3107.     return s.split(sub).join(by);
  3108. }
  3109. StringTools.hex = function(n,digits) {
  3110.     var s = "";
  3111.     var hexChars = "0123456789ABCDEF";
  3112.     do {
  3113.         s = hexChars.charAt(n & 15) + s;
  3114.         n >>>= 4;
  3115.     } while(n > 0);
  3116.     if(digits != null) while(s.length < digits) s = "0" + s;
  3117.     return s;
  3118. }
  3119. StringTools.fastCodeAt = function(s,index) {
  3120.     return s.charCodeAt(index);
  3121. }
  3122. StringTools.isEOF = function(c) {
  3123.     return c != c;
  3124. }
  3125. var XMLHttpRequestResponseType = { __ename__ : true, __constructs__ : ["arraybuffer","blob","document","json","text"] }
  3126. XMLHttpRequestResponseType.arraybuffer = ["arraybuffer",0];
  3127. XMLHttpRequestResponseType.arraybuffer.toString = $estr;
  3128. XMLHttpRequestResponseType.arraybuffer.__enum__ = XMLHttpRequestResponseType;
  3129. XMLHttpRequestResponseType.blob = ["blob",1];
  3130. XMLHttpRequestResponseType.blob.toString = $estr;
  3131. XMLHttpRequestResponseType.blob.__enum__ = XMLHttpRequestResponseType;
  3132. XMLHttpRequestResponseType.document = ["document",2];
  3133. XMLHttpRequestResponseType.document.toString = $estr;
  3134. XMLHttpRequestResponseType.document.__enum__ = XMLHttpRequestResponseType;
  3135. XMLHttpRequestResponseType.json = ["json",3];
  3136. XMLHttpRequestResponseType.json.toString = $estr;
  3137. XMLHttpRequestResponseType.json.__enum__ = XMLHttpRequestResponseType;
  3138. XMLHttpRequestResponseType.text = ["text",4];
  3139. XMLHttpRequestResponseType.text.toString = $estr;
  3140. XMLHttpRequestResponseType.text.__enum__ = XMLHttpRequestResponseType;
  3141. var Xml = function() {
  3142. };
  3143. Xml.__name__ = true;
  3144. Xml.parse = function(str) {
  3145.     return haxe.xml.Parser.parse(str);
  3146. }
  3147. Xml.createElement = function(name) {
  3148.     var r = new Xml();
  3149.     r.nodeType = Xml.Element;
  3150.     r._children = new Array();
  3151.     r._attributes = new Hash();
  3152.     r.setNodeName(name);
  3153.     return r;
  3154. }
  3155. Xml.createPCData = function(data) {
  3156.     var r = new Xml();
  3157.     r.nodeType = Xml.PCData;
  3158.     r.setNodeValue(data);
  3159.     return r;
  3160. }
  3161. Xml.createCData = function(data) {
  3162.     var r = new Xml();
  3163.     r.nodeType = Xml.CData;
  3164.     r.setNodeValue(data);
  3165.     return r;
  3166. }
  3167. Xml.createComment = function(data) {
  3168.     var r = new Xml();
  3169.     r.nodeType = Xml.Comment;
  3170.     r.setNodeValue(data);
  3171.     return r;
  3172. }
  3173. Xml.createDocType = function(data) {
  3174.     var r = new Xml();
  3175.     r.nodeType = Xml.DocType;
  3176.     r.setNodeValue(data);
  3177.     return r;
  3178. }
  3179. Xml.createProlog = function(data) {
  3180.     var r = new Xml();
  3181.     r.nodeType = Xml.Prolog;
  3182.     r.setNodeValue(data);
  3183.     return r;
  3184. }
  3185. Xml.createDocument = function() {
  3186.     var r = new Xml();
  3187.     r.nodeType = Xml.Document;
  3188.     r._children = new Array();
  3189.     return r;
  3190. }
  3191. Xml.prototype = {
  3192.     toString: function() {
  3193.         if(this.nodeType == Xml.PCData) return this._nodeValue;
  3194.         if(this.nodeType == Xml.CData) return "<![CDATA[" + this._nodeValue + "]]>";
  3195.         if(this.nodeType == Xml.Comment) return "<!--" + this._nodeValue + "-->";
  3196.         if(this.nodeType == Xml.DocType) return "<!DOCTYPE " + this._nodeValue + ">";
  3197.         if(this.nodeType == Xml.Prolog) return "<?" + this._nodeValue + "?>";
  3198.         var s = new StringBuf();
  3199.         if(this.nodeType == Xml.Element) {
  3200.             s.b += Std.string("<");
  3201.             s.b += Std.string(this._nodeName);
  3202.             var $it0 = this._attributes.keys();
  3203.             while( $it0.hasNext() ) {
  3204.                 var k = $it0.next();
  3205.                 s.b += Std.string(" ");
  3206.                 s.b += Std.string(k);
  3207.                 s.b += Std.string("=\"");
  3208.                 s.b += Std.string(this._attributes.get(k));
  3209.                 s.b += Std.string("\"");
  3210.             }
  3211.             if(this._children.length == 0) {
  3212.                 s.b += Std.string("/>");
  3213.                 return s.b;
  3214.             }
  3215.             s.b += Std.string(">");
  3216.         }
  3217.         var $it1 = this.iterator();
  3218.         while( $it1.hasNext() ) {
  3219.             var x = $it1.next();
  3220.             s.b += Std.string(x.toString());
  3221.         }
  3222.         if(this.nodeType == Xml.Element) {
  3223.             s.b += Std.string("</");
  3224.             s.b += Std.string(this._nodeName);
  3225.             s.b += Std.string(">");
  3226.         }
  3227.         return s.b;
  3228.     }
  3229.     ,insertChild: function(x,pos) {
  3230.         if(this._children == null) throw "bad nodetype";
  3231.         if(x._parent != null) HxOverrides.remove(x._parent._children,x);
  3232.         x._parent = this;
  3233.         this._children.splice(pos,0,x);
  3234.     }
  3235.     ,removeChild: function(x) {
  3236.         if(this._children == null) throw "bad nodetype";
  3237.         var b = HxOverrides.remove(this._children,x);
  3238.         if(b) x._parent = null;
  3239.         return b;
  3240.     }
  3241.     ,addChild: function(x) {
  3242.         if(this._children == null) throw "bad nodetype";
  3243.         if(x._parent != null) HxOverrides.remove(x._parent._children,x);
  3244.         x._parent = this;
  3245.         this._children.push(x);
  3246.     }
  3247.     ,firstElement: function() {
  3248.         if(this._children == null) throw "bad nodetype";
  3249.         var cur = 0;
  3250.         var l = this._children.length;
  3251.         while(cur < l) {
  3252.             var n = this._children[cur];
  3253.             if(n.nodeType == Xml.Element) return n;
  3254.             cur++;
  3255.         }
  3256.         return null;
  3257.     }
  3258.     ,firstChild: function() {
  3259.         if(this._children == null) throw "bad nodetype";
  3260.         return this._children[0];
  3261.     }
  3262.     ,elementsNamed: function(name) {
  3263.         if(this._children == null) throw "bad nodetype";
  3264.         return { cur : 0, x : this._children, hasNext : function() {
  3265.             var k = this.cur;
  3266.             var l = this.x.length;
  3267.             while(k < l) {
  3268.                 var n = this.x[k];
  3269.                 if(n.nodeType == Xml.Element && n._nodeName == name) break;
  3270.                 k++;
  3271.             }
  3272.             this.cur = k;
  3273.             return k < l;
  3274.         }, next : function() {
  3275.             var k = this.cur;
  3276.             var l = this.x.length;
  3277.             while(k < l) {
  3278.                 var n = this.x[k];
  3279.                 k++;
  3280.                 if(n.nodeType == Xml.Element && n._nodeName == name) {
  3281.                     this.cur = k;
  3282.                     return n;
  3283.                 }
  3284.             }
  3285.             return null;
  3286.         }};
  3287.     }
  3288.     ,elements: function() {
  3289.         if(this._children == null) throw "bad nodetype";
  3290.         return { cur : 0, x : this._children, hasNext : function() {
  3291.             var k = this.cur;
  3292.             var l = this.x.length;
  3293.             while(k < l) {
  3294.                 if(this.x[k].nodeType == Xml.Element) break;
  3295.                 k += 1;
  3296.             }
  3297.             this.cur = k;
  3298.             return k < l;
  3299.         }, next : function() {
  3300.             var k = this.cur;
  3301.             var l = this.x.length;
  3302.             while(k < l) {
  3303.                 var n = this.x[k];
  3304.                 k += 1;
  3305.                 if(n.nodeType == Xml.Element) {
  3306.                     this.cur = k;
  3307.                     return n;
  3308.                 }
  3309.             }
  3310.             return null;
  3311.         }};
  3312.     }
  3313.     ,iterator: function() {
  3314.         if(this._children == null) throw "bad nodetype";
  3315.         return { cur : 0, x : this._children, hasNext : function() {
  3316.             return this.cur < this.x.length;
  3317.         }, next : function() {
  3318.             return this.x[this.cur++];
  3319.         }};
  3320.     }
  3321.     ,attributes: function() {
  3322.         if(this.nodeType != Xml.Element) throw "bad nodeType";
  3323.         return this._attributes.keys();
  3324.     }
  3325.     ,exists: function(att) {
  3326.         if(this.nodeType != Xml.Element) throw "bad nodeType";
  3327.         return this._attributes.exists(att);
  3328.     }
  3329.     ,remove: function(att) {
  3330.         if(this.nodeType != Xml.Element) throw "bad nodeType";
  3331.         this._attributes.remove(att);
  3332.     }
  3333.     ,set: function(att,value) {
  3334.         if(this.nodeType != Xml.Element) throw "bad nodeType";
  3335.         this._attributes.set(att,value);
  3336.     }
  3337.     ,get: function(att) {
  3338.         if(this.nodeType != Xml.Element) throw "bad nodeType";
  3339.         return this._attributes.get(att);
  3340.     }
  3341.     ,getParent: function() {
  3342.         return this._parent;
  3343.     }
  3344.     ,setNodeValue: function(v) {
  3345.         if(this.nodeType == Xml.Element || this.nodeType == Xml.Document) throw "bad nodeType";
  3346.         return this._nodeValue = v;
  3347.     }
  3348.     ,getNodeValue: function() {
  3349.         if(this.nodeType == Xml.Element || this.nodeType == Xml.Document) throw "bad nodeType";
  3350.         return this._nodeValue;
  3351.     }
  3352.     ,setNodeName: function(n) {
  3353.         if(this.nodeType != Xml.Element) throw "bad nodeType";
  3354.         return this._nodeName = n;
  3355.     }
  3356.     ,getNodeName: function() {
  3357.         if(this.nodeType != Xml.Element) throw "bad nodeType";
  3358.         return this._nodeName;
  3359.     }
  3360.     ,__class__: Xml
  3361. }
  3362. var Xml2Html = function() {
  3363. };
  3364. Xml2Html.__name__ = true;
  3365. Xml2Html.prototype = {
  3366.     prepareXmlAsHtml: function(txt) {
  3367.         this.map = new Array();
  3368.         txt = StringTools.replace(txt,"<![CDATA[","]]>");
  3369.         var lines = txt.split("]]>");
  3370.         if(lines.length == 0) return txt;
  3371.         var buff = new StringBuf();
  3372.         var k = 0;
  3373.         var _g1 = 0, _g = lines.length;
  3374.         while(_g1 < _g) {
  3375.             var i = _g1++;
  3376.             var val = lines[i];
  3377.             if(i % 2 == 0) buff.b += Std.string(val); else {
  3378.                 var key = Std.string(k);
  3379.                 buff.b += Std.string("<cdata>" + key + "</cdata>");
  3380.                 var cdata = new CData();
  3381.                 cdata.key = key;
  3382.                 cdata.val = val;
  3383.                 this.map.push(cdata);
  3384.                 k++;
  3385.             }
  3386.         }
  3387.         return buff.b;
  3388.     }
  3389.     ,getCData: function(key) {
  3390.         if(this.map == null) return null;
  3391.         var _g1 = 0, _g = this.map.length;
  3392.         while(_g1 < _g) {
  3393.             var i = _g1++;
  3394.             var item = this.map[i];
  3395.             if(item.key == key) return item.val;
  3396.         }
  3397.         return null;
  3398.     }
  3399.     ,__class__: Xml2Html
  3400. }
  3401. var Zoom = function() { }
  3402. Zoom.__name__ = true;
  3403. Zoom.getContext = function() {
  3404.     return Zoom.cvsZoom.getContext("2d");
  3405. }
  3406. Zoom.Load = function() {
  3407.     Zoom.cvsZoomDom = js.Lib.document.getElementById("cvsZoom");
  3408.     Zoom.mask = js.Lib.document.getElementById("mask");
  3409.     Zoom.maskPopup = js.Lib.document.getElementById("maskPopup");
  3410.     Zoom.maskPopup.onclick = Zoom.forbidden;
  3411.     Zoom.maskPopup.ondblclick = Zoom.onDblClick;
  3412.     Zoom.maskPopup.ontouchstart = Zoom.forbidden;
  3413.     Zoom.maskPopup.ontouchmove = Zoom.forbidden;
  3414.     Zoom.maskPopup.ontouchend = Zoom.forbidden;
  3415.     Zoom.maskPopup.ontouchcancel = Zoom.forbidden;
  3416.     Zoom.maskPopup.gestureend = Zoom.forbidden;
  3417.     Zoom.maskPopup.gesturestart = Zoom.forbidden;
  3418.     Zoom.maskPopup.gesturechange = Zoom.forbidden;
  3419.     Zoom.maskPopup.onscroll = Zoom.forbidden;
  3420.     Zoom.maskPopup.onmousewheel = Zoom.forbidden;
  3421.     Zoom.mask.ondblclick = Zoom.onDblClick;
  3422.     var dy = Zoom.cvsZoomDom;
  3423.     Zoom.cvsZoom = dy;
  3424.     Zoom.mask.ontouchstart = Zoom.onZoom;
  3425.     Zoom.clientWidth = js.Lib.window.document.body.clientWidth;
  3426.     Zoom.clientHeight = js.Lib.window.document.body.clientHeight;
  3427.     RunTime.clientWidth = Zoom.clientWidth;
  3428.     RunTime.clientHeight = Zoom.clientHeight;
  3429.     var params = orc.utils.Util.getUrlParams();
  3430.     var _g1 = 0, _g = params.length;
  3431.     while(_g1 < _g) {
  3432.         var i = _g1++;
  3433.         var item = params[i];
  3434.         if(item.key == "img") Zoom.imgSrc = item.value; else if(item.key == "bookId") Zoom.bookId = item.value; else if(item.key == "page") Zoom.pageNum = item.value; else if(item.key == "pw") Zoom.pageWidth = Std.parseFloat(item.value); else if(item.key == "ph") Zoom.pageHeight = Std.parseFloat(item.value); else if(item.key == "bookTitle") {
  3435.             Zoom.bookTitle = item.value;
  3436.             Zoom.bookTitle = StringTools.urlDecode(Zoom.bookTitle);
  3437.         } else if(item.key == "bbv") Zoom.bbv = item.value; else if(item.key == "ua") Zoom.analyticsUA = item.value; else if(item.key == "pcode") Zoom.pcode = item.value;
  3438.     }
  3439.     js.Lib.document.title = Zoom.bookTitle + " - Page " + Std.string(Std.parseInt(Zoom.pageNum) + 1);
  3440.     Zoom.img = new core.Html5Image(Zoom.imgSrc,Zoom.onLoadImage);
  3441.     RunTime.useAnalyticsUA(Zoom.analyticsUA,Zoom.bookId);
  3442.     RunTime.logPageView(Std.parseInt(Zoom.pageNum) + 1);
  3443. }
  3444. Zoom.forbidden = function(e) {
  3445.     e.stopPropagation();
  3446. }
  3447. Zoom.onLoadImage = function() {
  3448.     var w = Zoom.img.image.width;
  3449.     var h = Zoom.img.image.height;
  3450.     Zoom.cvsZoom.width = Math.max(Zoom.pageWidth,Math.max(w,Zoom.clientWidth)) | 0;
  3451.     Zoom.cvsZoom.height = Math.max(Zoom.pageHeight,Math.max(h,Zoom.clientHeight)) | 0;
  3452.     Zoom.mask.style.width = Std.string(Zoom.cvsZoom.width) + "px";
  3453.     Zoom.mask.style.height = Std.string(Zoom.cvsZoom.height) + "px";
  3454.     Zoom.xOffset = 0.5 * (Zoom.cvsZoom.width - Math.max(Zoom.img.image.width,Zoom.pageWidth));
  3455.     Zoom.yOffset = 0.5 * (Zoom.cvsZoom.height - Math.max(Zoom.img.image.height,Zoom.pageHeight));
  3456.     Zoom.xScale = w / Zoom.pageWidth;
  3457.     Zoom.yScale = h / Zoom.pageHeight;
  3458.     Zoom.draw();
  3459.     RunTime.requestHotlinks(Zoom.loadHotlinks);
  3460.     RunTime.requestButtons(Zoom.loadButtons);
  3461.     RunTime.requestVideos(Zoom.loadVideos);
  3462. }
  3463. Zoom.draw = function() {
  3464.     var ctx = Zoom.getContext();
  3465.     var dp = Zoom.getDrawParams();
  3466.     ctx.drawImage(Zoom.img.image,dp.sx,dp.sy,dp.sw,dp.sh,dp.dx,dp.dy,dp.dw,dp.dh);
  3467. }
  3468. Zoom.getDrawParams = function() {
  3469.     var dp = new core.DrawParams();
  3470.     dp.sx = 0;
  3471.     dp.sy = 0;
  3472.     dp.sw = Zoom.img.image.width;
  3473.     dp.sh = Zoom.img.image.height;
  3474.     dp.dx = Zoom.xOffset;
  3475.     dp.dy = Zoom.yOffset;
  3476.     dp.dw = Math.max(Zoom.pageWidth,dp.sw);
  3477.     dp.dh = Math.max(Zoom.pageHeight,dp.sh);
  3478.     return dp;
  3479. }
  3480. Zoom.loadHotlinks = function() {
  3481.     var list = RunTime.book.hotlinks;
  3482.     var _g1 = 0, _g = list.length;
  3483.     while(_g1 < _g) {
  3484.         var i = _g1++;
  3485.         var item = list[i];
  3486.         if(Std.string(item.pageNum) == Zoom.pageNum) Zoom.hotlinks.push(item);
  3487.     }
  3488.     Zoom.renderHotlinks();
  3489. }
  3490. Zoom.loadVideos = function() {
  3491.     var list = RunTime.book.videos;
  3492.     var _g1 = 0, _g = list.length;
  3493.     while(_g1 < _g) {
  3494.         var i = _g1++;
  3495.         var item = list[i];
  3496.         if(Std.string(item.pageNum) == Zoom.pageNum) Zoom.videos.push(item);
  3497.     }
  3498.     Zoom.renderVideos();
  3499. }
  3500. Zoom.loadButtons = function() {
  3501.     var list = RunTime.book.buttons;
  3502.     var _g1 = 0, _g = list.length;
  3503.     while(_g1 < _g) {
  3504.         var i = _g1++;
  3505.         var item = list[i];
  3506.         if(Std.string(item.pageNum) == Zoom.pageNum) Zoom.buttons.push(item);
  3507.     }
  3508.     Zoom.renderButtons();
  3509. }
  3510. Zoom.renderHotlinks = function() {
  3511.     var list = Zoom.hotlinks;
  3512.     var ctx = Zoom.getContext();
  3513.     var _g1 = 0, _g = list.length;
  3514.     while(_g1 < _g) {
  3515.         var i = _g1++;
  3516.         var item = list[i];
  3517.         Zoom.renderHotlink(ctx,item);
  3518.     }
  3519. }
  3520. Zoom.renderHotlink = function(ctx,link) {
  3521.     link.loadToRect(ctx,Zoom.xOffset + link.x * Zoom.xScale,Zoom.yOffset + link.y * Zoom.yScale,link.width * Zoom.xScale,link.height * Zoom.yScale);
  3522. }
  3523. Zoom.renderVideos = function() {
  3524.     var dom = js.Lib.document.getElementById("cvsVideo");
  3525.     var _g1 = 0, _g = Zoom.videos.length;
  3526.     while(_g1 < _g) {
  3527.         var i = _g1++;
  3528.         var item = Zoom.videos[i];
  3529.         item.x = item.x * Zoom.xScale;
  3530.         if(item.youtubeId == null || item.youtubeId == "") dom.innerHTML += core.HtmlHelper.toRectVideoHtml(item,Zoom.xOffset + item.x * Zoom.xScale,Zoom.yOffset + item.y * Zoom.yScale,item.width * Zoom.xScale,item.height * Zoom.yScale); else dom.innerHTML += core.HtmlHelper.toRectYoutubeVideoHtml(item,Zoom.xOffset + item.x * Zoom.xScale,Zoom.yOffset + item.y * Zoom.yScale,item.width * Zoom.xScale,item.height * Zoom.yScale);
  3531.     }
  3532. }
  3533. Zoom.renderButtons = function() {
  3534.     var list = Zoom.buttons;
  3535.     var ctx = Zoom.getContext();
  3536.     var _g1 = 0, _g = list.length;
  3537.     while(_g1 < _g) {
  3538.         var i = _g1++;
  3539.         var item = list[i];
  3540.         item.loadToContext2DRect(ctx,Zoom.xOffset + item.x * Zoom.xScale,Zoom.yOffset + item.y * Zoom.yScale,item.width * Zoom.xScale,item.height * Zoom.yScale);
  3541.     }
  3542. }
  3543. Zoom.onDblClick = function(e) {
  3544.     Zoom.zoomOut();
  3545. }
  3546. Zoom.onZoom = function(e) {
  3547.     var date = new Date();
  3548.     if(Zoom.lastTouchTime != null) {
  3549.         var lastTime = Zoom.lastTouchTime.getTime();
  3550.         var newTime = date.getTime();
  3551.         if(newTime - lastTime < RunTime.doubleClickIntervalMs) {
  3552.             Zoom.lastTouchTime = null;
  3553.             Zoom.zoomOut();
  3554.             return;
  3555.         }
  3556.     }
  3557.     Zoom.lastTouchTime = date;
  3558.     var obj = e;
  3559.     var touch = obj.touches[0];
  3560.     if(obj.touches.length > 1) Zoom.zoomOut(); else Zoom.onClick(e);
  3561. }
  3562. Zoom.zoomOut = function(num) {
  3563.     if(num == null) num = -1;
  3564.     if(num == -1 || num == null) num = Std.parseInt(Zoom.pageNum);
  3565.     js.Lib.window.location.href = RunTime.urlIndex + "?page=" + Std.string(num) + "&bbv=" + Zoom.bbv + "&pcode=" + Zoom.pcode;
  3566. }
  3567. Zoom.onClick = function(e) {
  3568.     var match = null;
  3569.     var list = Zoom.hotlinks;
  3570.     var obj = e;
  3571.     var touch = obj.touches[0];
  3572.     var xx = touch.screenX;
  3573.     var yy = touch.screenY;
  3574.     Zoom.popupXOffset = xx - touch.clientX;
  3575.     Zoom.popupYOffset = yy - touch.clientY;
  3576.     var _g1 = 0, _g = list.length;
  3577.     while(_g1 < _g) {
  3578.         var i = _g1++;
  3579.         var link = list[i];
  3580.         if(xx >= Zoom.xOffset + link.x * Zoom.xScale && xx <= Zoom.xOffset + link.x * Zoom.xScale + link.width * Zoom.xScale && yy >= Zoom.yOffset + link.y * Zoom.yScale && yy <= Zoom.yOffset + link.y * Zoom.yScale + link.height * Zoom.yScale) {
  3581.             match = link;
  3582.             break;
  3583.         }
  3584.     }
  3585.     Zoom.invokeClickHotlink(match);
  3586.     var matchButton = null;
  3587.     var _g1 = 0, _g = Zoom.buttons.length;
  3588.     while(_g1 < _g) {
  3589.         var i = _g1++;
  3590.         var button = Zoom.buttons[i];
  3591.         if(xx >= Zoom.xOffset + button.x * Zoom.xScale && xx <= Zoom.xOffset + button.x * Zoom.xScale + button.width * Zoom.xScale && yy >= Zoom.yOffset + button.y * Zoom.yScale && yy <= Zoom.yOffset + button.y * Zoom.yScale + button.height * Zoom.yScale) {
  3592.             matchButton = button;
  3593.             break;
  3594.         }
  3595.     }
  3596.     Zoom.invokeClickButton(matchButton);
  3597. }
  3598. Zoom.invokeClickHotlink = function(link) {
  3599.     if(link == null) return;
  3600.     link.click(Zoom.popupXOffset,Zoom.popupYOffset);
  3601. }
  3602. Zoom.invokeClickButton = function(item) {
  3603.     if(item == null) return;
  3604.     item.click(Zoom.popupXOffset,Zoom.popupYOffset);
  3605. }
  3606. core.AudioInfo = function() {
  3607.     this.pageNum = -1;
  3608.     this.url = "";
  3609.     this.id = "";
  3610. };
  3611. core.AudioInfo.__name__ = true;
  3612. core.AudioInfo.prototype = {
  3613.     __class__: core.AudioInfo
  3614. }
  3615. core.BookContext = function() {
  3616.     this.pages = new Array();
  3617.     this.pageOffset = 0;
  3618.     this.scale = 1;
  3619.     this.offsetX = 0;
  3620.     this.offsetY = 0;
  3621. };
  3622. core.BookContext.__name__ = true;
  3623. core.BookContext.prototype = {
  3624.     getNoteAt: function(x,y) {
  3625.         if(this.notes == null) return null;
  3626.         var _g1 = 0, _g = this.notes.length;
  3627.         while(_g1 < _g) {
  3628.             var i = _g1++;
  3629.             var item = this.notes[i];
  3630.             if(item.hitTest(x,y) == true) return item;
  3631.         }
  3632.         return null;
  3633.     }
  3634.     ,getHighLightAt: function(x,y) {
  3635.         if(this.highlights == null) return null;
  3636.         var _g1 = 0, _g = this.highlights.length;
  3637.         while(_g1 < _g) {
  3638.             var i = _g1++;
  3639.             var item = this.highlights[i];
  3640.             if(item.hitTest(x,y) == true) return item;
  3641.         }
  3642.         return null;
  3643.     }
  3644.     ,getButtonAt: function(x,y) {
  3645.         if(this.buttons == null) return null;
  3646.         var _g1 = 0, _g = this.buttons.length;
  3647.         while(_g1 < _g) {
  3648.             var i = _g1++;
  3649.             var item = this.buttons[i];
  3650.             if(item.hitTest(x,y) == true) return item;
  3651.         }
  3652.         return null;
  3653.     }
  3654.     ,getHotLinkAt: function(x,y) {
  3655.         if(this.hotlinks == null) return null;
  3656.         var _g1 = 0, _g = this.hotlinks.length;
  3657.         while(_g1 < _g) {
  3658.             var i = _g1++;
  3659.             var item = this.hotlinks[i];
  3660.             if(item.hitTest(x,y) == true) return item;
  3661.         }
  3662.         return null;
  3663.     }
  3664.     ,render: function() {
  3665.         this.clear();
  3666.         if(this.pages != null && this.ctx != null) {
  3667.             var _g1 = 0, _g = this.pages.length;
  3668.             while(_g1 < _g) {
  3669.                 var i = _g1++;
  3670.                 var item = this.pages[i];
  3671.                 item.scale = this.scale;
  3672.                 item.offsetX = this.offsetX;
  3673.                 item.offsetY = this.offsetY;
  3674.                 item.visible = true;
  3675.                 item.loadToContext2D(this.ctx);
  3676.             }
  3677.         }
  3678.         if(this.hotlinks != null && this.ctx != null) {
  3679.             var _g1 = 0, _g = this.hotlinks.length;
  3680.             while(_g1 < _g) {
  3681.                 var i = _g1++;
  3682.                 var item = this.hotlinks[i];
  3683.                 item.scale = this.scale;
  3684.                 item.offsetX = this.offsetX;
  3685.                 item.offsetY = this.offsetY;
  3686.                 item.loadToContext2D(this.ctxButton);
  3687.             }
  3688.         }
  3689.         if(this.buttons != null && this.ctxButton != null) {
  3690.             var _g1 = 0, _g = this.buttons.length;
  3691.             while(_g1 < _g) {
  3692.                 var i = _g1++;
  3693.                 var item = this.buttons[i];
  3694.                 item.scale = this.scale;
  3695.                 item.offsetX = this.offsetX;
  3696.                 item.offsetY = this.offsetY;
  3697.                 item.loadToContext2D(this.ctxButton);
  3698.             }
  3699.         }
  3700.         if(this.highlights != null && this.ctxHighLight != null) {
  3701.             var _g1 = 0, _g = this.highlights.length;
  3702.             while(_g1 < _g) {
  3703.                 var i = _g1++;
  3704.                 var item = this.highlights[i];
  3705.                 item.scale = this.scale;
  3706.                 item.offsetX = this.offsetX;
  3707.                 item.offsetY = this.offsetY;
  3708.                 item.loadToContext2D(this.ctxHighLight);
  3709.             }
  3710.         }
  3711.         if(this.notes != null && this.ctxNote != null) {
  3712.             var _g1 = 0, _g = this.notes.length;
  3713.             while(_g1 < _g) {
  3714.                 var i = _g1++;
  3715.                 var item = this.notes[i];
  3716.                 item.scale = this.scale;
  3717.                 item.offsetX = this.offsetX;
  3718.                 item.offsetY = this.offsetY;
  3719.                 item.loadToContext2D(this.ctxNote);
  3720.             }
  3721.         }
  3722.     }
  3723.     ,addPage: function(page) {
  3724.         if(page == null) return;
  3725.         if(this.pages == null) this.pages = new Array();
  3726.         page.bookContext = this;
  3727.         this.pages.push(page);
  3728.     }
  3729.     ,clear: function(removePages) {
  3730.         if(removePages == null) removePages = false;
  3731.         if(this.pages != null) {
  3732.             var _g1 = 0, _g = this.pages.length;
  3733.             while(_g1 < _g) {
  3734.                 var i = _g1++;
  3735.                 var item = this.pages[i];
  3736.                 item.visible = false;
  3737.             }
  3738.         }
  3739.         if(removePages == true) this.pages = new Array();
  3740.         if(this.ctx != null) this.ctx.clearRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height);
  3741.         if(this.ctxButton != null) this.ctxButton.clearRect(0,0,this.ctxButton.canvas.width,this.ctxButton.canvas.height);
  3742.         if(this.ctxHighLight != null) this.ctxHighLight.clearRect(0,0,this.ctxHighLight.canvas.width,this.ctxHighLight.canvas.height);
  3743.         if(this.ctxNote != null) this.ctxNote.clearRect(0,0,this.ctxNote.canvas.width,this.ctxNote.canvas.height);
  3744.     }
  3745.     ,removeAllPages: function() {
  3746.         if(this.pages != null) {
  3747.             var _g1 = 0, _g = this.pages.length;
  3748.             while(_g1 < _g) {
  3749.                 var i = _g1++;
  3750.                 var item = this.pages[i];
  3751.                 item.visible = false;
  3752.             }
  3753.         }
  3754.         this.pages = new Array();
  3755.     }
  3756.     ,resetLayoutParams: function() {
  3757.         this.offsetX = 0;
  3758.         this.offsetY = 0;
  3759.         this.scale = 1;
  3760.     }
  3761.     ,getPageCount: function() {
  3762.         return this.pages.length;
  3763.     }
  3764.     ,__class__: core.BookContext
  3765. }
  3766. core.Bookmark = function() {
  3767. };
  3768. core.Bookmark.__name__ = true;
  3769. core.Bookmark.prototype = {
  3770.     clone: function() {
  3771.         var bookmark = new core.Bookmark();
  3772.         bookmark.guid = this.guid;
  3773.         bookmark.pageNum = this.pageNum;
  3774.         bookmark.text = this.text;
  3775.         return bookmark;
  3776.     }
  3777.     ,remove: function() {
  3778.         localStorage.removeItem(this.guid);
  3779.     }
  3780.     ,fillData: function(guid,json) {
  3781.         var objJSON = JSON.parse(json);
  3782.         this.pageNum = Std.parseInt(objJSON.obj[0].pageNum);
  3783.         this.text = objJSON.obj[0].text;
  3784.         this.guid = guid;
  3785.     }
  3786.     ,save: function() {
  3787.         this.guid = RunTime.kvPrex + "@$bm$@" + new Date().getTime();
  3788.         localStorage.setItem(this.guid,this.toJSONString());
  3789.     }
  3790.     ,toJSONString: function() {
  3791.         var json = "{\"obj\":[{\"pageNum\":\"" + this.pageNum + "\",\"text\":\"" + this.text + "\"}]}";
  3792.         return json;
  3793.     }
  3794.     ,__class__: core.Bookmark
  3795. }
  3796. core.ButtonInfo = function() {
  3797.     this.fontSize = "12";
  3798.     this.fontColor = "#ffffff";
  3799.     this.text = "";
  3800.     this.layer = "onpage";
  3801.     this.pageLayoutType = 0;
  3802.     this.scale = 1;
  3803.     this.offsetX = 0;
  3804.     this.offsetY = 0;
  3805. };
  3806. core.ButtonInfo.__name__ = true;
  3807. core.ButtonInfo.prototype = {
  3808.     click: function(popupXOffset,popupYOffset) {
  3809.         if(popupYOffset == null) popupYOffset = 0;
  3810.         if(popupXOffset == null) popupXOffset = 0;
  3811.         switch(this.type) {
  3812.         case "":
  3813.             if(this.destination != null) {
  3814.                 if(this.destination.indexOf("page:") == 0) {
  3815.                     var val = HxOverrides.substr(this.destination,5,null);
  3816.                     var num = Std.parseInt(val);
  3817.                     if(RunTime.flipBook != null) RunTime.flipBook.turnToPage(num - 1); else Zoom.zoomOut(num - 1);
  3818.                 } else if(this.destination.indexOf("mailto:") == 0) {
  3819.                     RunTime.logClickLink(this.destination);
  3820.                     js.Lib.window.location.href = this.destination;
  3821.                 } else if(this.destination.indexOf("fun:") == 0) {
  3822.                     var fun = HxOverrides.substr(this.destination,4,null);
  3823.                     if(fun == "content") RunTime.flipBook.onContentsClick(null); else if(fun == "thumb") RunTime.flipBook.onThumbsClick(null); else if(fun == "showtxt") RunTime.flipBook.onShowTxtClick(null); else if(fun == "highlight") RunTime.flipBook.onButtonMaskClick(null); else if(fun == "bookmark") RunTime.flipBook.onButtonBookmark(null); else if(fun == "notes") RunTime.flipBook.onButtonNoteClick(null); else if(fun == "autoflip") RunTime.flipBook.onAutoFlipClick(null); else if(fun == "download") RunTime.onDownloadClick(null); else if(fun == "fliptofront") RunTime.flipBook.turnToFirstPage(null); else if(fun == "flipleft") RunTime.flipBook.turnToPrevPage(null); else if(fun == "flipright") RunTime.flipBook.turnToNextPage(null); else if(fun == "fliptoback") RunTime.flipBook.turnToLastPage(null);
  3824.                 } else {
  3825.                     RunTime.logClickLink(this.destination);
  3826.                     js.Lib.window.location.href = this.destination;
  3827.                 }
  3828.             }
  3829.             break;
  3830.         case "image":
  3831.             RunTime.showPopupMaskLayer();
  3832.             RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  3833.             core.HtmlHelper.toPopupImageHtml(this,function(txt) {
  3834.                 js.Lib.document.getElementById("cvsOthers").innerHTML = txt;
  3835.                 js.Lib.document.getElementById("popupImage").style.cssText += " -webkit-transform: scale(1); -webkit-transition: 0.5s ease-out; ";
  3836.             });
  3837.             RunTime.logClickLink(this.destination);
  3838.             break;
  3839.         case "video":
  3840.             RunTime.showPopupMaskLayer();
  3841.             RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  3842.             js.Lib.document.getElementById("cvsOthers").innerHTML = core.HtmlHelper.toPopupVideoHtml(this);
  3843.             js.Lib.document.getElementById("popupVideo").style.cssText += " -webkit-transform: scale(1); -webkit-transition: 0.5s ease-out; ";
  3844.             RunTime.playVideo();
  3845.             RunTime.logVideoView(this.destination,this.youtubeId);
  3846.             break;
  3847.         case "audio":
  3848.             RunTime.flipBook.showPopupAudio(this);
  3849.             RunTime.logAudioView(this.destination);
  3850.             RunTime.playAudio();
  3851.             break;
  3852.         case "message":
  3853.             RunTime.showPopupMaskLayer();
  3854.             RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  3855.             js.Lib.document.getElementById("cvsOthers").innerHTML = core.HtmlHelper.toPopupHtml(this);
  3856.             js.Lib.document.getElementById("popupMessage").style.cssText += " -webkit-transform: scale(1); -webkit-transition: 0.5s ease-out; ";
  3857.             break;
  3858.         case "message-hover":
  3859.             RunTime.showPopupMaskLayer();
  3860.             RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  3861.             js.Lib.document.getElementById("cvsOthers").innerHTML = core.HtmlHelper.toPopupHtml(this);
  3862.             js.Lib.document.getElementById("popupMessage").style.cssText += " -webkit-transform: scale(1); -webkit-transition: 0.5s ease-out; ";
  3863.             break;
  3864.         }
  3865.     }
  3866.     ,hitTest: function(mouseX,mouseY) {
  3867.         if(this.type == "none") return false;
  3868.         var dp = this.getDrawParams();
  3869.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  3870.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  3871.         var ww = this.width * (dp.dw / dp.sw);
  3872.         var hh = this.height * (dp.dh / dp.sh);
  3873.         var result = mouseX >= xx && mouseY >= yy && mouseX <= xx + ww && mouseY <= yy + hh;
  3874.         return result;
  3875.     }
  3876.     ,loadToRect: function(ctx,x,y,w,h) {
  3877.         if(w > 0 && h > 0) {
  3878.             if(this.text == "") ctx.drawImage(this._imagePage,0,0,this._imagePage.width,this._imagePage.height,x,y,w,h); else {
  3879.                 ctx.save();
  3880.                 ctx.fillStyle = this.fontColor;
  3881.                 ctx.font = this.fontSize + "px " + "san-serif";
  3882.                 ctx.fillText(this.text,x,y + 30);
  3883.                 ctx.restore();
  3884.             }
  3885.         }
  3886.     }
  3887.     ,loadToContext2DRect: function(ctx,x,y,w,h) {
  3888.         this.ctx = ctx;
  3889.         if(this._imagePage == null) {
  3890.             var self = this;
  3891.             this.getImagePage(function() {
  3892.                 self.loaded = true;
  3893.                 self.loadToContext2DRect(self.ctx,self.x,self.y,self.width,self.height);
  3894.             });
  3895.         }
  3896.         if(this.loaded == true) this.loadToRect(ctx,x,y,this.width,this.height);
  3897.     }
  3898.     ,loadToContext2D: function(ctx) {
  3899.         this.ctx = ctx;
  3900.         if(this._imagePage == null) {
  3901.             var self = this;
  3902.             this.getImagePage(function() {
  3903.                 self.loaded = true;
  3904.                 self.loadToContext2D(self.ctx);
  3905.             });
  3906.         }
  3907.         if(this.loaded == true) {
  3908.             var dp = this.getDrawParams();
  3909.             var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  3910.             var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  3911.             var ww = this.width * (dp.dw / dp.sw);
  3912.             var hh = this.height * (dp.dh / dp.sh);
  3913.             this.loadToRect(ctx,xx,yy,ww,hh);
  3914.         }
  3915.     }
  3916.     ,getImagePage: function(onloadFunc) {
  3917.         if(this._imagePage != null) return this._imagePage;
  3918.         var img = new Image();
  3919.         img.src = this.image;
  3920.         img.onload = onloadFunc;
  3921.         this._imagePage = img;
  3922.         return this._imagePage;
  3923.     }
  3924.     ,getDrawParams: function() {
  3925.         var dp = RunTime.getDrawParams(this.pageLayoutType);
  3926.         if(this.pageLayoutType == 2) dp = RunTime.getGolobaDrawParams();
  3927.         dp.applyTransform(this.scale,this.offsetX,this.offsetY);
  3928.         return dp;
  3929.     }
  3930.     ,__class__: core.ButtonInfo
  3931. }
  3932. core.DrawParams = function() {
  3933. };
  3934. core.DrawParams.__name__ = true;
  3935. core.DrawParams.prototype = {
  3936.     sliceRight: function(ratio,xOffset) {
  3937.         if(xOffset == null) xOffset = 0;
  3938.         if(ratio < 0) ratio = 0; else if(ratio > 1) ratio = 1;
  3939.         var dp = new core.DrawParams();
  3940.         dp.sx = this.sx + this.sw * (1 - ratio);
  3941.         dp.sy = this.sy;
  3942.         dp.dx = this.dx + this.dw * (1 - ratio) + xOffset;
  3943.         dp.dy = this.dy;
  3944.         dp.sw = this.sw * ratio;
  3945.         dp.sh = this.sh;
  3946.         dp.dw = this.dw * ratio;
  3947.         dp.dh = this.dh;
  3948.         return dp;
  3949.     }
  3950.     ,sliceLeft: function(ratio,xOffset) {
  3951.         if(xOffset == null) xOffset = 0;
  3952.         if(ratio < 0) ratio = 0; else if(ratio > 1) ratio = 1;
  3953.         var dp = new core.DrawParams();
  3954.         dp.sx = this.sx;
  3955.         dp.sy = this.sy;
  3956.         dp.dx = this.dx + xOffset;
  3957.         dp.dy = this.dy;
  3958.         dp.sw = this.sw * ratio;
  3959.         dp.sh = this.sh;
  3960.         dp.dw = this.dw * ratio;
  3961.         dp.dh = this.dh;
  3962.         return dp;
  3963.     }
  3964.     ,toString: function() {
  3965.         return Std.string(this.sx) + "," + Std.string(this.sy) + "," + Std.string(this.sw) + "," + Std.string(this.sh) + "," + Std.string(this.dx) + "," + Std.string(this.dy) + "," + Std.string(this.dw) + "," + Std.string(this.dh);
  3966.     }
  3967.     ,applyTransform: function(scale,offsetX,offsetY) {
  3968.         this.dx = this.dx * scale + offsetX;
  3969.         this.dy = this.dy * scale + offsetY;
  3970.         this.dw = this.dw * scale;
  3971.         this.dh = this.dh * scale;
  3972.     }
  3973.     ,clone: function() {
  3974.         var dw = new core.DrawParams();
  3975.         dw.sx = this.sx;
  3976.         dw.sy = this.sy;
  3977.         dw.sw = this.sw;
  3978.         dw.sh = this.sh;
  3979.         dw.dx = this.dx;
  3980.         dw.dy = this.dy;
  3981.         dw.dw = this.dw;
  3982.         dw.dh = this.dh;
  3983.         return dw;
  3984.     }
  3985.     ,scaleY: function() {
  3986.         return this.dh / this.sh;
  3987.     }
  3988.     ,scaleX: function() {
  3989.         return this.dw / this.sw;
  3990.     }
  3991.     ,dhi: function() {
  3992.         return Math.round(this.dh);
  3993.     }
  3994.     ,dwi: function() {
  3995.         return Math.round(this.dw);
  3996.     }
  3997.     ,dyi: function() {
  3998.         return Math.round(this.dy);
  3999.     }
  4000.     ,dxi: function() {
  4001.         return Math.round(this.dx);
  4002.     }
  4003.     ,__class__: core.DrawParams
  4004. }
  4005. core.HighLight = function() {
  4006.     this.note = new core.Note();
  4007.     this.x = 0;
  4008.     this.y = 0;
  4009.     this.width = 0;
  4010.     this.height = 0;
  4011.     this.pageNum = -1;
  4012.     this.guid = "";
  4013.     this.checked = false;
  4014.     this.pageLayoutType = 0;
  4015.     this.scale = 1;
  4016.     this.offsetX = 0;
  4017.     this.offsetY = 0;
  4018. };
  4019. core.HighLight.__name__ = true;
  4020. core.HighLight.prototype = {
  4021.     click: function(popupXOffset,popupYOffset) {
  4022.         if(popupYOffset == null) popupYOffset = 0;
  4023.         if(popupXOffset == null) popupXOffset = 0;
  4024.         RunTime.showPopupMaskLayer();
  4025.         RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  4026.         js.Lib.document.getElementById("cvsOthers").innerHTML = core.HtmlHelper.toNotePopupHtml(this,"saveHighlightNote","deleteHighlightNote");
  4027.         js.Lib.document.getElementById("textNote").focus();
  4028.     }
  4029.     ,hitTest: function(mouseX,mouseY) {
  4030.         var dp = this.getDrawParams();
  4031.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  4032.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  4033.         var ww = this.width * (dp.dw / dp.sw);
  4034.         var hh = this.height * (dp.dh / dp.sh);
  4035.         var result = mouseX >= xx && mouseY >= yy && mouseX <= xx + ww && mouseY <= yy + hh;
  4036.         return result;
  4037.     }
  4038.     ,draw: function(context) {
  4039.         var radius = 5;
  4040.         context.save();
  4041.         context.fillStyle = "rgba(0,255,0,0.4)";
  4042.         context.fillRect(this.tx | 0,this.ty | 0,this.twidth | 0,this.theight | 0);
  4043.         context.restore();
  4044.         if(this.note != null) {
  4045.             this.note.x = this.tx;
  4046.             this.note.y = this.ty - this.note.image.height;
  4047.             this.note.draw();
  4048.         }
  4049.     }
  4050.     ,loadToContext2D: function(context) {
  4051.         var radius = 5;
  4052.         context.save();
  4053.         context.fillStyle = "rgba(0,255,0,0.4)";
  4054.         var dp = this.getDrawParams();
  4055.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  4056.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  4057.         var ww = this.width * (dp.dw / dp.sw);
  4058.         var hh = this.height * (dp.dh / dp.sh);
  4059.         context.fillRect(xx | 0,yy | 0,ww | 0,hh | 0);
  4060.         context.restore();
  4061.         if(this.note != null) {
  4062.             this.note.x = this.x;
  4063.             this.note.y = this.y - this.note.image.height;
  4064.             this.note.draw();
  4065.         }
  4066.     }
  4067.     ,remove: function() {
  4068.         localStorage.removeItem(this.guid);
  4069.     }
  4070.     ,updateText: function(text) {
  4071.         this.note.text = text;
  4072.         localStorage.setItem(this.guid,this.toJSONString());
  4073.     }
  4074.     ,setChecked: function(bChecked) {
  4075.         this.checked = bChecked;
  4076.         if(this.checked) {
  4077.         } else {
  4078.         }
  4079.     }
  4080.     ,fillData: function(guid,json) {
  4081.         var objJSON = JSON.parse(json);
  4082.         this.x = Std.parseFloat(objJSON.obj[0].x);
  4083.         this.y = Std.parseFloat(objJSON.obj[0].y);
  4084.         this.width = Std.parseFloat(objJSON.obj[0].width);
  4085.         this.height = Std.parseFloat(objJSON.obj[0].height);
  4086.         this.note.text = objJSON.obj[0].note;
  4087.         this.pageNum = Std.parseInt(objJSON.obj[0].page);
  4088.         this.guid = guid;
  4089.     }
  4090.     ,DataTransform: function() {
  4091.         var dp = this.getDrawParams();
  4092.         this.pageNum = this.tpageNum;
  4093.         if(RunTime.singlePage) {
  4094.         } else if(RunTime.book.rightToLeft) {
  4095.             if(this.tx > RunTime.clientWidth / 2) dp = this.getLeftDrawParams(); else dp = this.getRightDrawParams();
  4096.         } else if(this.tx > RunTime.clientWidth / 2) dp = this.getRightDrawParams(); else dp = this.getLeftDrawParams();
  4097.         this.x = dp.sx + (this.tx - dp.dx) / (dp.dw / dp.sw);
  4098.         this.y = dp.sy + (this.ty - dp.dy) / (dp.dh / dp.sh);
  4099.         this.width = this.twidth / (dp.dw / dp.sw);
  4100.         this.height = this.theight / (dp.dh / dp.sh);
  4101.         haxe.Log.trace("x=" + this.x + ",y=" + this.y + ",width=" + this.width + ",height=" + this.height,{ fileName : "HighLight.hx", lineNumber : 191, className : "core.HighLight", methodName : "DataTransform"});
  4102.     }
  4103.     ,save: function() {
  4104.         if(this.twidth == 0 || this.theight == 0) return;
  4105.         this.guid = RunTime.kvPrex + "@$ht$@" + new Date().getTime();
  4106.         this.DataTransform();
  4107.         localStorage.setItem(this.guid,this.toJSONString());
  4108.     }
  4109.     ,toJSONString: function() {
  4110.         var json = "{\"obj\":[{\"x\":\"" + this.x + "\",\"y\":\"" + this.y + "\",\"width\":\"" + this.width + "\",\"height\":\"" + this.height + "\",\"page\":\"" + this.pageNum + "\",\"note\":\"" + this.note.text + "\"}]}";
  4111.         return json;
  4112.     }
  4113.     ,getBottom: function() {
  4114.         return this.y + this.height;
  4115.     }
  4116.     ,getTop: function() {
  4117.         return this.y;
  4118.     }
  4119.     ,getRight: function() {
  4120.         return this.x + this.width;
  4121.     }
  4122.     ,getLeft: function() {
  4123.         return this.x;
  4124.     }
  4125.     ,getContext: function() {
  4126.         return this.canvas.getContext("2d");
  4127.     }
  4128.     ,setCanvas: function(canvas) {
  4129.         this.canvas = canvas;
  4130.         if(this.note != null) this.note.setCanvas(this.canvas);
  4131.     }
  4132.     ,clone: function() {
  4133.         this.DataTransform();
  4134.         var hl = new core.HighLight();
  4135.         hl.x = this.x;
  4136.         hl.y = this.y;
  4137.         hl.width = this.width;
  4138.         hl.height = this.height;
  4139.         hl.pageNum = this.pageNum;
  4140.         hl.guid = this.guid;
  4141.         hl.note.text = this.note.text;
  4142.         return hl;
  4143.     }
  4144.     ,getRightDrawParams: function() {
  4145.         var dp = RunTime.getDrawParams(1);
  4146.         dp.applyTransform(this.scale,this.offsetX,this.offsetY);
  4147.         return dp;
  4148.     }
  4149.     ,getLeftDrawParams: function() {
  4150.         var dp = RunTime.getDrawParams(-1);
  4151.         dp.applyTransform(this.scale,this.offsetX,this.offsetY);
  4152.         return dp;
  4153.     }
  4154.     ,getDrawParams: function() {
  4155.         var dp = RunTime.getDrawParams(this.pageLayoutType);
  4156.         dp.applyTransform(this.scale,this.offsetX,this.offsetY);
  4157.         return dp;
  4158.     }
  4159.     ,__class__: core.HighLight
  4160. }
  4161. core.HotLink = function() {
  4162.     this.opacity = 0.8;
  4163.     this.pageLayoutType = 0;
  4164.     this.color = "#333333";
  4165.     this.scale = 1;
  4166.     this.offsetX = 0;
  4167.     this.offsetY = 0;
  4168. };
  4169. core.HotLink.__name__ = true;
  4170. core.HotLink.prototype = {
  4171.     click: function(popupXOffset,popupYOffset) {
  4172.         if(popupYOffset == null) popupYOffset = 0;
  4173.         if(popupXOffset == null) popupXOffset = 0;
  4174.         switch(this.type) {
  4175.         case "":
  4176.             if(this.destination != null) {
  4177.                 if(this.destination.indexOf("page:") == 0) {
  4178.                     var val = HxOverrides.substr(this.destination,5,null);
  4179.                     var num = Std.parseInt(val);
  4180.                     if(RunTime.flipBook != null) RunTime.flipBook.turnToPage(num - 1); else Zoom.zoomOut(num - 1);
  4181.                 } else if(this.destination.indexOf("mailto:") == 0) {
  4182.                     RunTime.logClickLink(this.destination);
  4183.                     js.Lib.window.location.href = this.destination;
  4184.                 } else if(this.destination.indexOf("fun:") == 0) {
  4185.                     var fun = HxOverrides.substr(this.destination,4,null);
  4186.                     if(fun == "content") RunTime.flipBook.onContentsClick(null); else if(fun == "thumb") RunTime.flipBook.onThumbsClick(null); else if(fun == "showtxt") RunTime.flipBook.onShowTxtClick(null); else if(fun == "highlight") RunTime.flipBook.onButtonMaskClick(null); else if(fun == "bookmark") RunTime.flipBook.onButtonBookmark(null); else if(fun == "notes") RunTime.flipBook.onButtonNoteClick(null); else if(fun == "autoflip") RunTime.flipBook.onAutoFlipClick(null); else if(fun == "download") RunTime.onDownloadClick(null); else if(fun == "fliptofront") RunTime.flipBook.turnToFirstPage(null); else if(fun == "flipleft") RunTime.flipBook.turnToPrevPage(null); else if(fun == "flipright") RunTime.flipBook.turnToNextPage(null); else if(fun == "fliptoback") RunTime.flipBook.turnToLastPage(null);
  4187.                 } else {
  4188.                     RunTime.logClickLink(this.destination);
  4189.                     js.Lib.window.location.href = this.destination;
  4190.                 }
  4191.             }
  4192.             break;
  4193.         case "image":
  4194.             RunTime.showPopupMaskLayer();
  4195.             RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  4196.             core.HtmlHelper.toPopupImageHtml(this,function(txt) {
  4197.                 js.Lib.document.getElementById("cvsOthers").innerHTML = txt;
  4198.                 js.Lib.document.getElementById("popupImage").style.cssText += " -webkit-transform: scale(1); -webkit-transition: 0.5s ease-out; ";
  4199.             });
  4200.             RunTime.logClickLink(this.destination);
  4201.             break;
  4202.         case "video":
  4203.             RunTime.showPopupMaskLayer();
  4204.             RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  4205.             js.Lib.document.getElementById("cvsOthers").innerHTML = core.HtmlHelper.toPopupVideoHtml(this);
  4206.             js.Lib.document.getElementById("popupVideo").style.cssText += " -webkit-transform: scale(1); -webkit-transition: 0.5s ease-out; ";
  4207.             RunTime.playVideo();
  4208.             RunTime.logVideoView(this.destination,this.youtubeId);
  4209.             break;
  4210.         case "audio":
  4211.             RunTime.flipBook.showPopupAudio(this);
  4212.             RunTime.logAudioView(this.destination);
  4213.             RunTime.playAudio();
  4214.             break;
  4215.         case "message":
  4216.             RunTime.showPopupMaskLayer();
  4217.             RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  4218.             js.Lib.document.getElementById("cvsOthers").innerHTML = core.HtmlHelper.toPopupHtml(this);
  4219.             js.Lib.document.getElementById("popupMessage").style.cssText += " -webkit-transform: scale(1); -webkit-transition: 0.5s ease-out; ";
  4220.             break;
  4221.         case "message-hover":
  4222.             RunTime.showPopupMaskLayer();
  4223.             RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  4224.             js.Lib.document.getElementById("cvsOthers").innerHTML = core.HtmlHelper.toPopupHtml(this);
  4225.             js.Lib.document.getElementById("popupMessage").style.cssText += " -webkit-transform: scale(1); -webkit-transition: 0.5s ease-out; ";
  4226.             break;
  4227.         }
  4228.     }
  4229.     ,hitTest: function(mouseX,mouseY) {
  4230.         var dp = this.getDrawParams();
  4231.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  4232.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  4233.         var ww = this.width * (dp.dw / dp.sw);
  4234.         var hh = this.height * (dp.dh / dp.sh);
  4235.         var result = mouseX >= xx && mouseY >= yy && mouseX <= xx + ww && mouseY <= yy + hh;
  4236.         return result;
  4237.     }
  4238.     ,loadToContext2D: function(ctx) {
  4239.         var dp = this.getDrawParams();
  4240.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  4241.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  4242.         var ww = this.width * (dp.dw / dp.sw);
  4243.         var hh = this.height * (dp.dh / dp.sh);
  4244.         this.loadToRect(ctx,xx,yy,ww,hh);
  4245.     }
  4246.     ,loadToRect: function(ctx,x,y,w,h) {
  4247.         if(w > 0 && h > 0) {
  4248.             ctx.fillStyle = orc.utils.DrawHelper.createFillStyle(this.color,this.opacity);
  4249.             ctx.fillRect(x | 0,y | 0,w | 0,h | 0);
  4250.         }
  4251.     }
  4252.     ,getDrawParams: function() {
  4253.         var dp = RunTime.getDrawParams(this.pageLayoutType);
  4254.         dp.applyTransform(this.scale,this.offsetX,this.offsetY);
  4255.         return dp;
  4256.     }
  4257.     ,__class__: core.HotLink
  4258. }
  4259. core.Html5Image = function(url,onLoad) {
  4260.     this.url = url;
  4261.     this.onload = onLoad;
  4262.     this.image = new Image();
  4263.     this.image.onload = this.onload;
  4264.     this.image.src = url;
  4265. };
  4266. core.Html5Image.__name__ = true;
  4267. core.Html5Image.prototype = {
  4268.     __class__: core.Html5Image
  4269. }
  4270. core.HtmlHelper = function() { }
  4271. core.HtmlHelper.__name__ = true;
  4272. core.HtmlHelper.toContentsHtml = function(xml) {
  4273.     var roots = orc.utils.Util.getXmlChilds(xml);
  4274.     if(roots.length != 1) return "";
  4275.     var root = roots[0];
  4276.     var childs = orc.utils.Util.getXmlChilds(root);
  4277.     var s = "";
  4278.     if(childs.length > 0) {
  4279.         var _g1 = 0, _g = childs.length;
  4280.         while(_g1 < _g) {
  4281.             var i = _g1++;
  4282.             s += core.HtmlHelper.toContentsNodeHtml(childs[i]);
  4283.         }
  4284.     }
  4285.     return s;
  4286. }
  4287. core.HtmlHelper.toContentsNodeHtml = function(xml) {
  4288.     var childs = orc.utils.Util.getXmlChilds(xml);
  4289.     var s = "";
  4290.     s += "<ul>";
  4291.     s += "<li>";
  4292.     s += core.HtmlHelper.toContentsNodeHtmlCore(xml);
  4293.     s += "</li>";
  4294.     if(childs.length > 0) {
  4295.         s += "<ul>";
  4296.         var _g1 = 0, _g = childs.length;
  4297.         while(_g1 < _g) {
  4298.             var i = _g1++;
  4299.             s += core.HtmlHelper.toContentsNodeHtml(childs[i]);
  4300.         }
  4301.         s += "</ul>";
  4302.     }
  4303.     s += "</ul>";
  4304.     return s;
  4305. }
  4306. core.HtmlHelper.toContentsNodeHtmlCore = function(xml) {
  4307.     var title = xml.get("title");
  4308.     var page = xml.get("page");
  4309.     var pageVal = 0;
  4310.     if(page != null && page != "") {
  4311.         pageVal = Std.parseInt(page);
  4312.         page = Std.string(pageVal - 1);
  4313.     }
  4314.     return "<span onclick=\"gotoPage(" + page + ");\">" + title + "</span>";
  4315. }
  4316. core.HtmlHelper.toSnsHtml = function(xml) {
  4317.     var roots = orc.utils.Util.getXmlChilds(xml);
  4318.     if(roots.length != 1) return "";
  4319.     var root = roots[0];
  4320.     var childs = orc.utils.Util.getXmlChilds(root);
  4321.     var s = "";
  4322.     s += "<div id='snsbox' style='float:left;width: 100%;height: 250px;'>";
  4323.     if(childs.length > 0) {
  4324.         var _g1 = 0, _g = childs.length;
  4325.         while(_g1 < _g) {
  4326.             var i = _g1++;
  4327.             s += core.HtmlHelper.toSnsNodeHtml(childs[i]);
  4328.         }
  4329.     }
  4330.     s += "</div>";
  4331.     return s;
  4332. }
  4333. core.HtmlHelper.toSnsNodeHtml = function(xml) {
  4334.     var s = "<p style='float:left;width:150px;height:20px;'>";
  4335.     s += "<a href='" + xml.get("href") + "'><img style='vertical-align:middle;' src='" + RunTime.urlRoot + xml.get("logoUrl") + "'>" + "</a>";
  4336.     s += "<span onclick=\"RunTime.navigateUrl('" + xml.get("href") + "')\" style='vertical-align:middle;'>" + xml.get("name") + "</span>";
  4337.     s += "</p>";
  4338.     return s;
  4339. }
  4340. core.HtmlHelper.toEmailHtml = function() {
  4341.     var s = "";
  4342.     s += "<form id='sendEmail' action='" + RunTime.book.gateway + "' method='post'>";
  4343.     s += "<table border='none' class='email'>";
  4344.     s += "<tr><td>" + L.s("To","To") + ":</td><td><input  id='tomail' type='text' name='tomail' /></td></tr>";
  4345.     s += "<tr><td>" + L.s("YourName","Your Name") + ":</td><td><input id='yname' type='text' name='yourName'/></td></tr>";
  4346.     s += "<tr><td>" + L.s("YourEmail","Your Email") + ":</td><td><input id='youremail' type='text' name='frommail'/></td></tr>";
  4347.     s += "<tr><td>" + L.s("Message","Message") + ":</td><td><textarea rows='10' cols='30' id='sharemsg' name='message'></textarea></td></tr>";
  4348.     s += "<tr><td></td><td align='right'><input style='width:100px' type='button' onclick='RunTime.onSendEmail();' value='" + L.s("Send","Send") + "'/></td></tr>";
  4349.     s += "</table>";
  4350.     s += "<input style='display:none' type='hide' id='subject' name='subject' value='" + L.s("YourFriend","YourFirend") + L.s("ShareEmailTitle","ShareEmailTitle") + "'/>";
  4351.     s += "</form>";
  4352.     return s;
  4353. }
  4354. core.HtmlHelper.toThumbsHtml = function(pages) {
  4355.     var s = "";
  4356.     var _g1 = 0, _g = pages.length;
  4357.     while(_g1 < _g) {
  4358.         var i = _g1++;
  4359.         var page = pages[i];
  4360.         s += core.HtmlHelper.toThumbsNodeHtml(page);
  4361.     }
  4362.     return s;
  4363. }
  4364. core.HtmlHelper.toThumbsNodeHtml = function(page) {
  4365.     return "<img class=\"thumb\" src=\"" + page.urlThumb + "\" onclick=\"gotoPage(" + page.num + "); \" />";
  4366. }
  4367. core.HtmlHelper.toBookmarksHtml = function(bookmarks,singleMode,lbEnable,rbEnable) {
  4368.     var s = "";
  4369.     s += "<div id=\"op\">";
  4370.     s += "<textarea id=\"bookmarknote\"></textarea>";
  4371.     if(singleMode) s += "<button onclick=\"addBookmark(0)\">Add Bookmark</button>"; else {
  4372.         if(lbEnable) s += "<button onclick=\"addBookmark(-1)\">Add Left Bookmark</button>"; else s += "<button disabled=\"disabled\">Add Left Bookmark</button>";
  4373.         if(rbEnable) s += "<button onclick=\"addBookmark(1)\">Add Right Bookmark</button>"; else s += "<button disabled=\"disabled\">Add Right Bookmark</button>";
  4374.     }
  4375.     s += "<button>Remove All</button>";
  4376.     s += "</div>";
  4377.     s += "<ul style=\"margin:20px 0px 0px 0px;padding-left:5px;padding-right:5px;\">";
  4378.     if(bookmarks != null) {
  4379.         var _g1 = 0, _g = bookmarks.length;
  4380.         while(_g1 < _g) {
  4381.             var i = _g1++;
  4382.             var bookmark = bookmarks[i];
  4383.             s += core.HtmlHelper.toBookmarkNodeHtml(bookmark);
  4384.         }
  4385.     }
  4386.     s += "</ul>";
  4387.     return s;
  4388. }
  4389. core.HtmlHelper.toBookmarkNodeHtml = function(bookmark) {
  4390.     var s = "";
  4391.     s += "<li class=\"bookmarkrow\" >";
  4392.     s += "<p class=\"p1\" onclick=\"gotoPage(" + Std.string(bookmark.pageNum - 1) + ")\" > P" + bookmark.pageNum + "</p>";
  4393.     s += "<p class=\"p2\" onclick=\"gotoPage(" + Std.string(bookmark.pageNum - 1) + ")\">" + bookmark.text + "</p>";
  4394.     s += "<button onclick=\"removeBookmark(" + Std.string(bookmark.pageNum - 1) + ")\" style=\"float:right;margin:0px -2px;\">" + L.s("RemoveBookmark","Remove") + "</button>";
  4395.     s += "</li>";
  4396.     return s;
  4397. }
  4398. core.HtmlHelper.toSearchHtml = function() {
  4399.     return StringTools.replace(RunTime.searchHtmlCache,"$Search",L.s("Search"));
  4400. }
  4401. core.HtmlHelper.toSearchResultHtml = function(results) {
  4402.     var s = "";
  4403.     s += "<table>";
  4404.     var _g1 = 0, _g = results.length;
  4405.     while(_g1 < _g) {
  4406.         var i = _g1++;
  4407.         var item = results[i];
  4408.         s += "<tr onclick=\"gotoPage(" + Std.string(item.page - 1) + ")\">";
  4409.         s += "<td width=\"40px\" class=\"colPage\">";
  4410.         s += "P" + Std.string(item.page);
  4411.         s += "</td>";
  4412.         s += "<td class=\"colContent\">";
  4413.         s += item.content;
  4414.         s += "</td>";
  4415.         s += "</tr>";
  4416.     }
  4417.     s += "</table>";
  4418.     return s;
  4419. }
  4420. core.HtmlHelper.toVideoHtml = function(video) {
  4421.     return video.toHtml();
  4422. }
  4423. core.HtmlHelper.toRectVideoHtml = function(video,xx,yy,ww,hh) {
  4424.     var loop = video.autoRepeat?"loop":"";
  4425.     var s = "";
  4426.     s += "<div id=\"" + video.id + "\" style=\"position:absolute;z-index:101;left:" + Std.string(Math.round(xx)) + "px;top:" + Std.string(Math.round(yy)) + "px;width:" + Std.string(Math.round(ww)) + "px;height:" + Std.string(Math.round(hh)) + "px;\">";
  4427.     s += "<video class=\"video-js\" src=\"" + video.url + "\" width=\"" + Std.string(Math.round(ww)) + "\" height=\"" + Std.string(Math.round(hh)) + "\" controls autoplay preload onloadeddata='RunTime.logVideoView(\"" + video.url + "\", \"" + video.youtubeId + "\")' " + loop + " >";
  4428.     s += "</video>";
  4429.     s += "</div>";
  4430.     return s;
  4431. }
  4432. core.HtmlHelper.toRectYoutubeVideoHtml = function(video,xx,yy,ww,hh) {
  4433.     var s = "";
  4434.     s += "<div id=\"" + video.id + "\" style=\"position:absolute;z-index:101;left:" + Std.string(Math.round(xx)) + "px;top:" + Std.string(Math.round(yy)) + "px;width:1px;height:1px;\">";
  4435.     s += "<iframe frameborder=\"0\" type=\"text/html\"" + "\" width=\"" + Std.string(Math.round(ww)) + "\" height=\"" + Std.string(Math.round(hh)) + "\"" + " src=\"http://www.youtube.com/embed/" + video.youtubeId + "?controls=1&antoplay=1&enablejsapi=1\">";
  4436.     s += "</iframe>";
  4437.     s += "</div>";
  4438.     return s;
  4439. }
  4440. core.HtmlHelper.toSlideshow = function(slideshow) {
  4441.     return slideshow.toHtml();
  4442. }
  4443. core.HtmlHelper.toSlideShowHtml = function(slideshow,xx,yy,ww,hh,scale) {
  4444.     var s = "";
  4445.     if(slideshow.transition == "move") {
  4446.         s += "<div class=\"" + "slides" + "\" style=\"position:absolute;z-index:108;left:" + Std.string(Math.round(xx)) + "px;top:" + Std.string(Math.round(yy)) + "px;width:" + Std.string(Math.round(ww)) + "px;height:" + Std.string(Math.round(hh)) + "px;\">";
  4447.         s += "<div  style=\"width: 100%;overflow: hidden;\">";
  4448.         s += "<div class=\"inner\" id=\"p_" + slideshow.id + "\" style=\"width:" + slideshow.slides.length * 100 + "%;\">";
  4449.         var _g1 = 0, _g = slideshow.slides.length;
  4450.         while(_g1 < _g) {
  4451.             var i = _g1++;
  4452.             s += "<article style=\"width:" + 1 / slideshow.slides.length * 100 + "%;\">";
  4453.             s += "<img src=\"" + slideshow.slides[i].url + "\" onclick=\"RunTime.navigateUrl('" + slideshow.slides[i].href + "');\">";
  4454.             s += "</article>";
  4455.         }
  4456.         s += "</div>";
  4457.         s += "</div>";
  4458.         s += "</div>";
  4459.     } else if(slideshow.transition == "fade") {
  4460.         s += "<div class=\"" + "slides" + "\" style=\"position:absolute;z-index:108;left:" + Std.string(Math.round(xx)) + "px;top:" + Std.string(Math.round(yy)) + "px;width:" + Std.string(Math.round(ww)) + "px;height:" + Std.string(Math.round(hh)) + "px;\">";
  4461.         s += "<div class=\"inner\" id=\"p_" + slideshow.id + "\" >";
  4462.         var _g1 = 0, _g = slideshow.slides.length;
  4463.         while(_g1 < _g) {
  4464.             var i = _g1++;
  4465.             var sid = slideshow.id + "_" + (slideshow.slides.length - i);
  4466.             s += "<article style=\"text-align:left;width:100%;overflow: hidden;background:" + slideshow.bgColor + ";position:absolute;\"" + " id=\"a_" + sid + "\">";
  4467.             s += "<img id=\"" + sid + "\" src=\"" + slideshow.slides[slideshow.slides.length - i - 1].url + "\"" + " onclick=\"RunTime.navigateUrl('" + slideshow.slides[slideshow.slides.length - i - 1].href + "');\" " + " style=\"" + "\"" + " onload=\"RunTime.resizeSlide(this," + (ww | 0) + "," + (hh | 0) + ",'" + sid + "'," + scale + ");\"" + ">";
  4468.             s += "</article>";
  4469.         }
  4470.         s += "</div>";
  4471.         s += "</div>";
  4472.     }
  4473.     return s;
  4474. }
  4475. core.HtmlHelper.toPopupImageHtml = function(item,success) {
  4476.     var w = RunTime.clientWidth * 0.9 | 0;
  4477.     var h = RunTime.clientHeight * 0.9 | 0;
  4478.     if(item.popupWidth != null && item.popupHeight != null) {
  4479.         w = item.popupWidth;
  4480.         h = item.popupHeight;
  4481.     } else {
  4482.         var img = null;
  4483.         var onload = function() {
  4484.             item.popupWidth = img.image.width;
  4485.             item.popupHeight = img.image.height;
  4486.             core.HtmlHelper.toPopupImageHtml(item,success);
  4487.         };
  4488.         img = new core.Html5Image(item.destination,onload);
  4489.         return;
  4490.     }
  4491.     var helper = new orc.utils.ImageMetricHelper(w,h);
  4492.     var scale = helper.getMaxFitScale(RunTime.clientWidth * 0.9,RunTime.clientHeight * 0.9);
  4493.     h = h * scale | 0;
  4494.     w = w * scale | 0;
  4495.     var left = (RunTime.clientWidth - w) / 2 | 0;
  4496.     var top = (RunTime.clientHeight - h) / 2 | 0;
  4497.     var s = "";
  4498.     if(item.popupWidth != null && item.popupHeight != null) {
  4499.         s = "";
  4500.         s += "<div id=\"popupImage\" style=\"position:absolute; z-index:100;left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px; background-color:#ffffff; -webkit-transform: scale(0.2); -webkit-transition: 0s ease-out; \" >";
  4501.         s += "<img src=\"" + Std.string(item.destination) + "\" style=\"width:" + Std.string(w) + "px;height:" + Std.string(h) + "px;\" />";
  4502.         s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearPopupContents();\" style=\"position:absolute;right:-12px;top:-12px;\" />";
  4503.         s += "</div>";
  4504.     } else {
  4505.         s = "";
  4506.         s += "<div style=\"position:absolute;z-index:100; left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px; \">";
  4507.         s += "<div style=\"margin:0 auto; \">";
  4508.         s += "<img src=\"" + Std.string(item.destination) + "\" style=\"max-width:" + Std.string(w) + "px;max-height:" + Std.string(h) + "px;\" />";
  4509.         s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearPopupContents();\" style=\"position:absolute;right:-12px;top:-12px;\" />";
  4510.         s += "</div>";
  4511.         s += "</div>";
  4512.     }
  4513.     if(success != null) success(s);
  4514. }
  4515. core.HtmlHelper.toPopupVideoHtml = function(item) {
  4516.     var w = 600;
  4517.     var h = 480;
  4518.     if(item.popupWidth != null && item.popupHeight != null) {
  4519.         w = item.popupWidth;
  4520.         h = item.popupHeight;
  4521.     }
  4522.     var left = (RunTime.clientWidth - w) / 2 | 0;
  4523.     var top = (RunTime.clientHeight - h) / 2 | 0;
  4524.     var s = "";
  4525.     s += "<div id=\"popupVideo\"style=\"position:absolute; z-index:101;left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px; background-color:#ffffff; -webkit-transform: scale(0.2); -webkit-transition: 0s ease-out; \">";
  4526.     if(item.youtubeId == null || item.youtubeId == "") {
  4527.         s += "<video class=\"video-js\" src=\"" + Std.string(item.destination) + "\" width=\"" + Std.string(Math.round(w)) + "\" height=\"" + Std.string(Math.round(h)) + "\" controls autoplay preload onloadstart='this.play()' >";
  4528.         s += "</video>";
  4529.     } else {
  4530.         s += "<div style=\"position:absolute;padding-left:0px;padding-top:0px;\">";
  4531.         s += "<iframe frameborder=\"0\" type=\"text/html\"" + "\" width=\"" + Std.string(Math.round(w)) + "\" height=\"" + Std.string(Math.round(h)) + "\"" + " src=\"http://www.youtube.com/embed/" + Std.string(item.youtubeId) + "?controls=1&antoplay=1&enablejsapi=1\">";
  4532.         s += "</iframe>";
  4533.         s += "</div>";
  4534.     }
  4535.     s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearPopupContents();\" style=\"position:absolute;right:-12px;top:-12px;\" />";
  4536.     s += "</div>";
  4537.     return s;
  4538. }
  4539. core.HtmlHelper.toPopupPageAudiosHtml = function(audio,isLeft) {
  4540.     if(isLeft == null) isLeft = true;
  4541.     var w = 200;
  4542.     var h = 40;
  4543.     var left = 20;
  4544.     var top = 20;
  4545.     var s = "";
  4546.     if(audio == null) return s;
  4547.     if(isLeft == true) {
  4548.         s += "<div style=\"position:absolute; z-index:102;left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px; \">";
  4549.         s += "<audio class=\"video-js\" src=\"" + audio.url + "\" width=\"" + Std.string(Math.round(w)) + "\" height=\"" + Std.string(Math.round(h)) + "\" controls autoplay >";
  4550.         s += "</audio>";
  4551.         s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearLeftBgAudio();\" style=\"position:absolute;right:-12px;top:-12px;\" />";
  4552.         s += "</div>";
  4553.     } else {
  4554.         s += "<div style=\"position:absolute; z-index:102;left:" + Std.string(RunTime.clientWidth / 2 + left | 0) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px; \">";
  4555.         s += "<audio class=\"video-js\" src=\"" + audio.url + "\" width=\"" + Std.string(Math.round(w)) + "\" height=\"" + Std.string(Math.round(h)) + "\" controls autoplay >";
  4556.         s += "</audio>";
  4557.         s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearRightBgAudio();\" style=\"position:absolute;right:-12px;top:-12px;\" />";
  4558.         s += "</div>";
  4559.     }
  4560.     return s;
  4561. }
  4562. core.HtmlHelper.toPopupAudioHtml = function(item) {
  4563.     var w = 200;
  4564.     var h = 40;
  4565.     var left = 20;
  4566.     var top = 20;
  4567.     var s = "";
  4568.     s += "<div style=\"position:absolute; z-index:103;left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px; \">";
  4569.     s += "<audio class=\"video-js\" src=\"" + Std.string(item.destination) + "\" width=\"" + Std.string(Math.round(w)) + "\" height=\"" + Std.string(Math.round(h)) + "\" controls autoplay >";
  4570.     s += "</audio>";
  4571.     s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearAudio();\" style=\"position:absolute;right:-12px;top:-12px;\" />";
  4572.     s += "</div>";
  4573.     return s;
  4574. }
  4575. core.HtmlHelper.toPopupHtml = function(item) {
  4576.     var w = 600;
  4577.     var h = 480;
  4578.     if(item.popupWidth != null && item.popupHeight != null) {
  4579.         w = item.popupWidth;
  4580.         h = item.popupHeight;
  4581.     }
  4582.     var left = (RunTime.clientWidth - w) / 2 | 0;
  4583.     var top = (RunTime.clientHeight - h) / 2 | 0;
  4584.     var s = "";
  4585.     s += "<div id=\"popupMessage\" style=\"position:absolute; z-index:104; left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px; background-color:#ffffff; text-align:left; -webkit-transform: scale(0.2); -webkit-transition: 0s ease-out; \">";
  4586.     s += Std.string(item.htmlText);
  4587.     s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearPopupContents();\" style=\"position:absolute;right:-12px;top:-12px;\" />";
  4588.     s += "</div>";
  4589.     return s;
  4590. }
  4591. core.HtmlHelper.toBookmarkPopupHtml = function(item) {
  4592.     var w = 600;
  4593.     var h = 480;
  4594.     var left = (RunTime.clientWidth - w) / 2 | 0;
  4595.     var top = (RunTime.clientHeight - h) / 2 | 0;
  4596.     var s = "";
  4597.     s += "<div style=\"position:absolute; z-index:104; left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px; background-color:#ffffff; text-align:left; \">";
  4598.     s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearPopupContents();\" style=\"position:absolute;right:-12px;top:-12px;\" />";
  4599.     s += "</div>";
  4600.     return s;
  4601. }
  4602. core.HtmlHelper.toNotePopupHtml = function(item,szSaveFunName,szDeleteFunName) {
  4603.     var w = 300;
  4604.     var h = 200;
  4605.     if(item.popupWidth != null && item.popupHeight != null) {
  4606.         w = item.popupWidth;
  4607.         h = item.popupHeight;
  4608.     }
  4609.     var left = (RunTime.clientWidth - w) / 2 | 0;
  4610.     var top = (RunTime.clientHeight - h) / 2 | 0;
  4611.     var s = "";
  4612.     s += "<div style=\"position:absolute; z-index:800; left:" + Std.string(left) + "px; top:" + Std.string(top) + "px; width:" + Std.string(w) + "px; height:" + Std.string(h) + "px;  \">" + "<div style=\"margin:0 0; position:absolute; background-color:black;" + "-webkit-border-radius:10px; border:1px solid #ccc; opacity:0.6;width:300px; height:200px;\">" + "</div>" + "<div style=\"position:absolute;top:10px; left:10px; width:280px;" + "background-color:#ffffff; border:1px solid #ccc;margin:0 0;\">" + "<div style=\"width:280px; height:150px; background:#ffffff\">" + "<textarea id=\"textNote\" style=\"width:275px; height:145px; border:0px\">" + Std.string(item.note.text) + "</textarea>" + "</div>" + "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearPopupContents();\" style=\"position:absolute;right:-20px;top:-20px;\" />" + "</div>" + "<div style=\"position:absolute;top:182px; left:10px;width:280px; margin:0 0; \">" + "<img onclick=\"" + szSaveFunName + "()\" src=\"content/images/save.png\" style=\"position:absolute;" + "left:5px; top:-16px\"/>" + "<img onclick=\"" + szDeleteFunName + "()\" src=\"content/images/garbage.png\" style=\"position:absolute;" + "left:75px; top:-16px\"/>" + "</div>" + "</div>";
  4613.     return s;
  4614. }
  4615. core.HtmlHelper.toInputPwdHtml = function() {
  4616.     var left = (RunTime.clientWidth - 300) / 2;
  4617.     var top = (RunTime.clientHeight - 180) / 2;
  4618.     var pos = "position:absolute;z-index:200; left:" + Std.string(Math.round(left)) + "px; top:" + Std.string(Math.round(top)) + "px;";
  4619.     var s = "";
  4620.     s += "<div id=\"inputBox\" style=\" " + pos + " width:300px; height:120px;background-color:#CCCCCC; \">";
  4621.     s += "<p>" + L.s("NeedPassword") + "</p>";
  4622.     s += "<input id=\"tbKeyword\" type=\"password\" style=\"width:120px; height:20px; \"  onkeypress=\"return onInputKeyPress(event)\" />";
  4623.     s += "<input type=\"button\" style=\"height:20px; \" value=\"" + L.s("Submit") + "\" onclick=\"inputPwd(); \" />";
  4624.     s += "</div>";
  4625.     return s;
  4626. }
  4627. core.HtmlHelper.toInputUnlockPwdHtml = function() {
  4628.     var left = (RunTime.clientWidth - 300) / 2;
  4629.     var top = (RunTime.clientHeight - 180) / 2;
  4630.     var pos = "position:absolute;z-index:200; left:" + Std.string(Math.round(left)) + "px; top:" + Std.string(Math.round(top)) + "px;";
  4631.     var s = "";
  4632.     s += "<div id=\"inputBox\" style=\" " + pos + " width:300px; height:120px;background-color:#CCCCCC; \">";
  4633.     s += "<img width=\"24\" height=\"24\" src=\"content/images/close.png\" onclick=\"clearPopupContents();\" style=\"position:absolute;right:-10px;top:-10px;\" />";
  4634.     s += "<p>" + L.s("NeedPassword") + "</p>";
  4635.     s += "<input id=\"tbKeyword\" type=\"password\" style=\"width:120px; height:20px; \"  onkeypress=\"return onUnlockKeyPress(event)\" />";
  4636.     s += "<input type=\"button\" style=\"height:20px; \" value=\"" + L.s("Submit") + "\" onclick=\"unlockPage(); \" />";
  4637.     s += "</div>";
  4638.     return s;
  4639. }
  4640. core.LangCfg = function() {
  4641.     this.content = null;
  4642.     this.isDefault = false;
  4643. };
  4644. core.LangCfg.__name__ = true;
  4645. core.LangCfg.prototype = {
  4646.     __class__: core.LangCfg
  4647. }
  4648. core.Note = function() {
  4649.     this.image = new Image();
  4650.     this.image.src = "content/images/iconNote.png";
  4651.     this.text = "";
  4652.     this.x = 0;
  4653.     this.y = 0;
  4654.     this.guid = "";
  4655. };
  4656. core.Note.__name__ = true;
  4657. core.Note.prototype = {
  4658.     hitTest: function(x,y) {
  4659.         if(this.image == null) return false;
  4660.         if(x < this.x || y < this.y || x > this.x + this.image.width || y > this.y + this.image.height) return false;
  4661.         return true;
  4662.     }
  4663.     ,loadToContext2D: function(context) {
  4664.         if(this.image != null) context.drawImage(this.image,this.x,this.y);
  4665.     }
  4666.     ,draw: function() {
  4667.         if(this.canvas == null || this.image == null) return;
  4668.         var context = this.getContext();
  4669.         context.drawImage(this.image,this.x,this.y);
  4670.     }
  4671.     ,getContext: function() {
  4672.         return this.canvas.getContext("2d");
  4673.     }
  4674.     ,setCanvas: function(canvas) {
  4675.         this.canvas = canvas;
  4676.     }
  4677.     ,setImage: function(image) {
  4678.         this.image = image;
  4679.     }
  4680.     ,__class__: core.Note
  4681. }
  4682. core.NoteIcon = function() {
  4683.     this.note = new core.Note();
  4684.     this.x = 0;
  4685.     this.y = 0;
  4686.     this.width = 0;
  4687.     this.height = 0;
  4688.     this.pageNum = -1;
  4689.     this.guid = "";
  4690.     this.checked = false;
  4691.     this.pageLayoutType = 0;
  4692.     this.scale = 1;
  4693.     this.offsetX = 0;
  4694.     this.offsetY = 0;
  4695. };
  4696. core.NoteIcon.__name__ = true;
  4697. core.NoteIcon.prototype = {
  4698.     click: function(popupXOffset,popupYOffset) {
  4699.         if(popupYOffset == null) popupYOffset = 0;
  4700.         if(popupXOffset == null) popupXOffset = 0;
  4701.         RunTime.showPopupMaskLayer();
  4702.         RunTime.setOffset(js.Lib.document.getElementById("cvsOthers"),popupXOffset,popupYOffset);
  4703.         js.Lib.document.getElementById("cvsOthers").innerHTML = core.HtmlHelper.toNotePopupHtml(this,"saveNote","deleteNote");
  4704.         js.Lib.document.getElementById("textNote").focus();
  4705.     }
  4706.     ,hitTest: function(mouseX,mouseY) {
  4707.         var dp = this.getDrawParams();
  4708.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  4709.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  4710.         var ww = this.width * (dp.dw / dp.sw);
  4711.         var hh = this.height * (dp.dh / dp.sh);
  4712.         var result = mouseX >= xx && mouseY >= yy && mouseX <= xx + ww && mouseY <= yy + hh;
  4713.         return result;
  4714.     }
  4715.     ,draw: function(context) {
  4716.         var radius = 5;
  4717.         context.save();
  4718.         context.fillStyle = "rgba(255,0,0,0.4)";
  4719.         context.fillRect(this.tx | 0,this.ty | 0,this.twidth | 0,this.theight | 0);
  4720.         context.restore();
  4721.         if(this.note != null) {
  4722.             this.note.x = this.tx;
  4723.             this.note.y = this.ty - this.note.image.height;
  4724.             this.note.draw();
  4725.         }
  4726.     }
  4727.     ,loadToContext2D: function(context) {
  4728.         var radius = 5;
  4729.         context.save();
  4730.         context.fillStyle = "rgba(255,0,0,0.4)";
  4731.         var dp = this.getDrawParams();
  4732.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  4733.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  4734.         var ww = this.width * (dp.dw / dp.sw);
  4735.         var hh = this.height * (dp.dh / dp.sh);
  4736.         context.drawImage(this.note.image,xx | 0,yy | 0,ww | 0,hh | 0);
  4737.         context.restore();
  4738.         if(this.note != null) {
  4739.             this.note.x = this.x;
  4740.             this.note.y = this.y - this.note.image.height;
  4741.             this.note.draw();
  4742.         }
  4743.     }
  4744.     ,remove: function() {
  4745.         localStorage.removeItem(this.guid);
  4746.     }
  4747.     ,updateText: function(text) {
  4748.         this.note.text = text;
  4749.         localStorage.setItem(this.guid,this.toJSONString());
  4750.     }
  4751.     ,setChecked: function(bChecked) {
  4752.         this.checked = bChecked;
  4753.         if(this.checked) {
  4754.         } else {
  4755.         }
  4756.     }
  4757.     ,fillData: function(guid,json) {
  4758.         var objJSON = JSON.parse(json);
  4759.         this.x = Std.parseFloat(objJSON.obj[0].x);
  4760.         this.y = Std.parseFloat(objJSON.obj[0].y);
  4761.         this.width = Std.parseFloat(objJSON.obj[0].width);
  4762.         this.height = Std.parseFloat(objJSON.obj[0].height);
  4763.         this.note.text = objJSON.obj[0].note;
  4764.         this.pageNum = Std.parseInt(objJSON.obj[0].page);
  4765.         this.guid = guid;
  4766.     }
  4767.     ,DataTransform: function() {
  4768.         var dp = this.getDrawParams();
  4769.         this.pageNum = this.tpageNum;
  4770.         if(RunTime.singlePage) {
  4771.         } else if(RunTime.book.rightToLeft) {
  4772.             if(this.tx > RunTime.clientWidth / 2) dp = this.getLeftDrawParams(); else dp = this.getRightDrawParams();
  4773.         } else if(this.tx > RunTime.clientWidth / 2) dp = this.getRightDrawParams(); else dp = this.getLeftDrawParams();
  4774.         this.x = dp.sx + (this.tx - dp.dx) / (dp.dw / dp.sw);
  4775.         this.y = dp.sy + (this.ty - dp.dy) / (dp.dh / dp.sh);
  4776.         this.width = this.twidth / (dp.dw / dp.sw);
  4777.         this.height = this.theight / (dp.dh / dp.sh);
  4778.         haxe.Log.trace("x=" + this.x + ",y=" + this.y + ",width=" + this.width + ",height=" + this.height,{ fileName : "NoteIcon.hx", lineNumber : 193, className : "core.NoteIcon", methodName : "DataTransform"});
  4779.     }
  4780.     ,save: function() {
  4781.         if(this.twidth == 0 || this.theight == 0) return;
  4782.         this.guid = RunTime.kvPrex + "@$ni$@" + new Date().getTime();
  4783.         this.DataTransform();
  4784.         localStorage.setItem(this.guid,this.toJSONString());
  4785.     }
  4786.     ,toJSONString: function() {
  4787.         var json = "{\"obj\":[{\"x\":\"" + this.x + "\",\"y\":\"" + this.y + "\",\"width\":\"" + this.width + "\",\"height\":\"" + this.height + "\",\"page\":\"" + this.pageNum + "\",\"note\":\"" + this.note.text + "\"}]}";
  4788.         return json;
  4789.     }
  4790.     ,getBottom: function() {
  4791.         return this.y + this.height;
  4792.     }
  4793.     ,getTop: function() {
  4794.         return this.y;
  4795.     }
  4796.     ,getRight: function() {
  4797.         return this.x + this.width;
  4798.     }
  4799.     ,getLeft: function() {
  4800.         return this.x;
  4801.     }
  4802.     ,getContext: function() {
  4803.         return this.canvas.getContext("2d");
  4804.     }
  4805.     ,setCanvas: function(canvas) {
  4806.         this.canvas = canvas;
  4807.         if(this.note != null) this.note.setCanvas(this.canvas);
  4808.     }
  4809.     ,clone: function() {
  4810.         this.DataTransform();
  4811.         var hl = new core.NoteIcon();
  4812.         hl.x = this.x;
  4813.         hl.y = this.y;
  4814.         hl.width = this.width;
  4815.         hl.height = this.height;
  4816.         hl.pageNum = this.pageNum;
  4817.         hl.guid = this.guid;
  4818.         hl.note.text = this.note.text;
  4819.         return hl;
  4820.     }
  4821.     ,getRightDrawParams: function() {
  4822.         var dp = RunTime.getDrawParams(1);
  4823.         dp.applyTransform(this.scale,this.offsetX,this.offsetY);
  4824.         return dp;
  4825.     }
  4826.     ,getLeftDrawParams: function() {
  4827.         var dp = RunTime.getDrawParams(-1);
  4828.         dp.applyTransform(this.scale,this.offsetX,this.offsetY);
  4829.         return dp;
  4830.     }
  4831.     ,getDrawParams: function() {
  4832.         var dp = RunTime.getDrawParams(this.pageLayoutType);
  4833.         dp.applyTransform(this.scale,this.offsetX,this.offsetY);
  4834.         return dp;
  4835.     }
  4836.     ,__class__: core.NoteIcon
  4837. }
  4838. core.Page = function() {
  4839.     this.locked = false;
  4840.     this.canZoom = true;
  4841.     this.aniScale = 1;
  4842.     this.visible = true;
  4843.     this.pageOffset = 0;
  4844.     this.scale = 1;
  4845.     this.offsetX = 0;
  4846.     this.offsetY = 0;
  4847.     this.bigMode = false;
  4848.     this.locked = false;
  4849. };
  4850. core.Page.__name__ = true;
  4851. core.Page.prototype = {
  4852.     clipImage: function(ctx,img,sx,sy,sw,sh,dx,dy,dw,dh) {
  4853.         if(img.src == null || img.src == "") {
  4854.             js.Lib.alert("no data");
  4855.             return;
  4856.         }
  4857.         var pw = RunTime.book.pageWidth;
  4858.         var ph = RunTime.book.pageHeight;
  4859.         var rw = img.width;
  4860.         var rh = img.height;
  4861.         var scaleX = rw / pw;
  4862.         var scaleY = rh / ph;
  4863.         sx = sx * scaleX;
  4864.         sy = sy * scaleY;
  4865.         sw = sw * scaleX;
  4866.         sh = sh * scaleY;
  4867.         if(sx < 0) sx = 0;
  4868.         if(sy < 0) sy = 0;
  4869.         if(sx + sw > img.width) sw = img.width - sx;
  4870.         if(sy + sh > img.height) sh = img.height - sy;
  4871.         if(sx >= img.width || sy >= img.height) return;
  4872.         if(sw < 1 || sh < 1) return;
  4873.         ctx.save();
  4874.         ctx.drawImage(img,sx,sy,sw,sh,dx,dy,dw,dh);
  4875.         if(RunTime.bLocked && this.locked) {
  4876.             ctx.fillStyle = "rgb(255,255,255)";
  4877.             ctx.fillRect(dx | 0,dy | 0,dw | 0,dh | 0);
  4878.         }
  4879.         ctx.restore();
  4880.     }
  4881.     ,drawImageCore: function(offset) {
  4882.         var dp = this.drawParams.clone();
  4883.         if(dp == null || dp.dw < 2) return;
  4884.         dp.applyTransform(this.scale,this.offsetX,this.offsetY);
  4885.         if(offset == 0) {
  4886.             this.clipImage(this.ctx,this._imagePage,dp.sx,dp.sy,dp.sw,dp.sh,dp.dx,dp.dy,dp.dw,dp.dh);
  4887.             if(this._imageData == null) {
  4888.             }
  4889.         } else if(offset > 0) this.clipImage(this.ctx,this._imagePage,dp.sx,dp.sy,dp.sw * (1 - offset),dp.sh,dp.dx + dp.dw * offset,dp.dy,dp.dw * (1 - offset),dp.dh); else {
  4890.             offset = -offset;
  4891.             this.clipImage(this.ctx,this._imagePage,dp.sx + offset * dp.sw,dp.sy,dp.sw * (1 - offset),dp.sh,dp.dx,dp.dy,dp.dw * (1 - offset),dp.dh);
  4892.         }
  4893.     }
  4894.     ,draw: function() {
  4895.         if(this.ctx == null) return;
  4896.         if(this.drawParams == null) return;
  4897.         if(this.visible == false) return;
  4898.         var offset = this.pageOffset;
  4899.         if(this.bookContext != null) offset += this.bookContext.pageOffset;
  4900.         if(offset > -1.001 && offset < -1) offset = -1;
  4901.         if(offset > 1 && offset < 1.001) offset = 1;
  4902.         if(offset <= -1 || offset >= 1) return;
  4903.         this.drawImageCore(offset);
  4904.     }
  4905.     ,loadToContext2D: function(ctx) {
  4906.         this.ctx = ctx;
  4907.         if(this._imagePage == null) this.getImagePage();
  4908.         if(this.loaded == true) {
  4909.             RunTime.divLoading.style.display = "none";
  4910.             this.draw();
  4911.         }
  4912.     }
  4913.     ,onMouseClick: function(e) {
  4914.         if(e.localX > this._imagePage.width * 0.5) {
  4915.             if(this.turnRightCallback != null) this.turnRightCallback();
  4916.         } else if(this.turnLeftCallback != null) this.turnLeftCallback();
  4917.     }
  4918.     ,clearCallback: function() {
  4919.         this.turnLeftCallback = null;
  4920.         this.turnRightCallback = null;
  4921.     }
  4922.     ,zoom: function(scale) {
  4923.         this.aniScale += scale;
  4924.     }
  4925.     ,loadBigImagePage: function() {
  4926.         var img = new Image();
  4927.         img.src = this.getBigPageUrl();
  4928.     }
  4929.     ,getPageUrl: function() {
  4930.         return this.urlPage;
  4931.     }
  4932.     ,getBlankPage: function() {
  4933.         return RunTime.urlRoot + "content/images/bgLock.png";
  4934.     }
  4935.     ,getBigPageUrl: function() {
  4936.         var url = this.urlPage;
  4937.         var seg = url.split("/");
  4938.         return RunTime.urlRoot + "content/pages/" + seg[seg.length - 1];
  4939.     }
  4940.     ,setBigImageMode: function() {
  4941.         this.bigMode = true;
  4942.     }
  4943.     ,getImagePage: function() {
  4944.         if(this._imagePage != null) return this._imagePage;
  4945.         var img = new Image();
  4946.         img.src = this.urlPage;
  4947.         img.onload = $bind(this,this.onLoadImage);
  4948.         RunTime.divLoading.style.display = "inline";
  4949.         this._imagePage = img;
  4950.         return this._imagePage;
  4951.     }
  4952.     ,onLoadImage: function() {
  4953.         RunTime.divLoading.style.display = "none";
  4954.         this.loaded = true;
  4955.         this.draw();
  4956.         if(RunTime.flipBook.currentPageNum == null || RunTime.flipBook.currentPageNum == this.num) {
  4957.             RunTime.flipBook.loadCtxHotlinks();
  4958.             RunTime.flipBook.bookContext.render();
  4959.         }
  4960.     }
  4961.     ,__class__: core.Page
  4962. }
  4963. core.PagePair = function(i) {
  4964.     if(i < 0 || i >= RunTime.book.pages.length) return;
  4965.     this.currentPageNum = i;
  4966.     if(i == 0) {
  4967.         this.rightPage = RunTime.book.pages[i];
  4968.         this.rightPage.isDoublePageMode = true;
  4969.         this.rightPage.pageOffset = 0;
  4970.         this.rightPage.drawParams = RunTime.getDrawParams(1);
  4971.         RunTime.flipBook.zoomRightPage.width = this.rightPage.drawParams.dw | 0;
  4972.         RunTime.flipBook.zoomRightPage.height = this.rightPage.drawParams.dh | 0;
  4973.         RunTime.flipBook.zoomRightPage.style.left = Std.string(this.rightPage.drawParams.dx) + "px";
  4974.         RunTime.flipBook.zoomRightPage.style.top = Std.string(this.rightPage.drawParams.dy) + "px";
  4975.         RunTime.flipBook.rightPageLock.style.width = (this.rightPage.drawParams.dw | 0) + "px";
  4976.         RunTime.flipBook.rightPageLock.style.height = (this.rightPage.drawParams.dh | 0) + "px";
  4977.         RunTime.flipBook.rightPageLock.style.left = Std.string(this.rightPage.drawParams.dx) + "px";
  4978.         RunTime.flipBook.rightPageLock.style.top = Std.string(this.rightPage.drawParams.dy) + "px";
  4979.     } else if(i == RunTime.book.pages.length - 1 && i % 2 == 1) {
  4980.         this.leftPage = RunTime.book.pages[i];
  4981.         this.leftPage.isDoublePageMode = true;
  4982.         this.leftPage.pageOffset = 0;
  4983.         this.leftPage.drawParams = RunTime.getDrawParams(-1);
  4984.         RunTime.flipBook.zoomLeftPage.width = this.leftPage.drawParams.dw | 0;
  4985.         RunTime.flipBook.zoomLeftPage.height = this.leftPage.drawParams.dh | 0;
  4986.         RunTime.flipBook.zoomLeftPage.style.left = Std.string(this.leftPage.drawParams.dx) + "px";
  4987.         RunTime.flipBook.zoomLeftPage.style.top = Std.string(this.leftPage.drawParams.dy) + "px";
  4988.         RunTime.flipBook.leftPageLock.style.width = (this.leftPage.drawParams.dw | 0) + "px";
  4989.         RunTime.flipBook.leftPageLock.style.height = (this.leftPage.drawParams.dh | 0) + "px";
  4990.         RunTime.flipBook.leftPageLock.style.left = Std.string(this.leftPage.drawParams.dx) + "px";
  4991.         RunTime.flipBook.leftPageLock.style.top = Std.string(this.leftPage.drawParams.dy) + "px";
  4992.     } else {
  4993.         var right = i + 1 - (i + 1) % 2;
  4994.         var left = right - 1;
  4995.         this.leftPage = RunTime.book.pages[left];
  4996.         this.rightPage = RunTime.book.pages[right];
  4997.         this.leftPage.isDoublePageMode = true;
  4998.         this.rightPage.isDoublePageMode = true;
  4999.         this.leftPage.pageOffset = 0;
  5000.         this.rightPage.pageOffset = 0;
  5001.         this.leftPage.drawParams = RunTime.getDrawParams(-1);
  5002.         this.rightPage.drawParams = RunTime.getDrawParams(1);
  5003.         RunTime.flipBook.zoomRightPage.width = this.rightPage.drawParams.dw | 0;
  5004.         RunTime.flipBook.zoomRightPage.height = this.rightPage.drawParams.dh | 0;
  5005.         RunTime.flipBook.zoomRightPage.style.left = Std.string(this.rightPage.drawParams.dx) + "px";
  5006.         RunTime.flipBook.zoomRightPage.style.top = Std.string(this.rightPage.drawParams.dy) + "px";
  5007.         RunTime.flipBook.zoomLeftPage.width = this.leftPage.drawParams.dw | 0;
  5008.         RunTime.flipBook.zoomLeftPage.height = this.leftPage.drawParams.dh | 0;
  5009.         RunTime.flipBook.zoomLeftPage.style.left = Std.string(this.leftPage.drawParams.dx) + "px";
  5010.         RunTime.flipBook.zoomLeftPage.style.top = Std.string(this.leftPage.drawParams.dy) + "px";
  5011.         RunTime.flipBook.rightPageLock.style.width = (this.rightPage.drawParams.dw | 0) + "px";
  5012.         RunTime.flipBook.rightPageLock.style.height = (this.rightPage.drawParams.dh | 0) + "px";
  5013.         RunTime.flipBook.rightPageLock.style.left = Std.string(this.rightPage.drawParams.dx) + "px";
  5014.         RunTime.flipBook.rightPageLock.style.top = Std.string(this.rightPage.drawParams.dy) + "px";
  5015.         RunTime.flipBook.leftPageLock.style.width = (this.leftPage.drawParams.dw | 0) + "px";
  5016.         RunTime.flipBook.leftPageLock.style.height = (this.leftPage.drawParams.dh | 0) + "px";
  5017.         RunTime.flipBook.leftPageLock.style.left = Std.string(this.leftPage.drawParams.dx) + "px";
  5018.         RunTime.flipBook.leftPageLock.style.top = Std.string(this.leftPage.drawParams.dy) + "px";
  5019.     }
  5020. };
  5021. core.PagePair.__name__ = true;
  5022. core.PagePair.prototype = {
  5023.     getNumInDoubleMode: function() {
  5024.         if(this.leftPage != null) return this.leftPage.numInDoubleMode; else if(this.rightPage != null) return this.rightPage.numInDoubleMode; else return -1;
  5025.     }
  5026.     ,match: function(pageNum) {
  5027.         if(this.leftPage != null) {
  5028.             if(this.leftPage.num == pageNum) return -1;
  5029.         }
  5030.         if(this.rightPage != null) {
  5031.             if(this.rightPage.num == pageNum) return 1;
  5032.         }
  5033.         return 0;
  5034.     }
  5035.     ,__class__: core.PagePair
  5036. }
  5037. core.SearchResult = function(content,page) {
  5038.     this.content = content;
  5039.     this.page = page;
  5040. };
  5041. core.SearchResult.__name__ = true;
  5042. core.SearchResult.prototype = {
  5043.     __class__: core.SearchResult
  5044. }
  5045. core.Slide = function() {
  5046. };
  5047. core.Slide.__name__ = true;
  5048. core.Slide.prototype = {
  5049.     __class__: core.Slide
  5050. }
  5051. core.SlideshowInfo = function() {
  5052.     this.bgColor = "";
  5053.     this.slides = new Array();
  5054.     this.tweener = new core.Tweener();
  5055.     this.idx = 1;
  5056.     this.transition = "fade";
  5057.     this.countOfClip = 0;
  5058. };
  5059. core.SlideshowInfo.__name__ = true;
  5060. core.SlideshowInfo.prototype = {
  5061.     updateLayout: function(dom) {
  5062.         if(dom == null) return;
  5063.         var dp = this.getDrawParams();
  5064.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  5065.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  5066.         var ww = this.width * (dp.dw / dp.sw);
  5067.         var hh = this.height * (dp.dh / dp.sh);
  5068.         dom.style.left = Std.string(Math.round(xx)) + "px";
  5069.         dom.style.top = Std.string(Math.round(yy)) + "px";
  5070.         var videoDom = dom.firstChild;
  5071.         videoDom.width = Std.string(Math.round(ww));
  5072.         videoDom.height = Std.string(Math.round(hh));
  5073.     }
  5074.     ,toHtml: function() {
  5075.         var dp = this.getDrawParams();
  5076.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  5077.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  5078.         var ww = this.width * (dp.dw / dp.sw);
  5079.         var hh = this.height * (dp.dh / dp.sh);
  5080.         return core.HtmlHelper.toSlideShowHtml(this,xx,yy,ww,hh,dp.dw / dp.sw);
  5081.     }
  5082.     ,getDrawParams: function() {
  5083.         var dp = RunTime.getDrawParams(this.pageLayoutType);
  5084.         var ctx = RunTime.flipBook.bookContext;
  5085.         dp.applyTransform(ctx.scale,ctx.offsetX,ctx.offsetY);
  5086.         return dp;
  5087.     }
  5088.     ,onSlideChange: function(count) {
  5089.         if(count % this.countOfClip != 0) return;
  5090.         if(this.transition == "move") {
  5091.             var p = js.Lib.document.getElementById("p_" + this.id);
  5092.             if(p != null) {
  5093.                 var pidx = -this.idx * 100;
  5094.                 p.style.marginLeft = Std.string(pidx) + "%";
  5095.             }
  5096.             this.idx++;
  5097.             if(this.idx >= this.slides.length) this.idx = 0;
  5098.         } else {
  5099.             var a = js.Lib.document.getElementById("a_" + this.id + "_" + Std.string(this.idx));
  5100.             this.idx++;
  5101.             if(this.idx == this.slides.length + 1) {
  5102.                 var _g1 = 0, _g = this.slides.length;
  5103.                 while(_g1 < _g) {
  5104.                     var i = _g1++;
  5105.                     var t = i + 1;
  5106.                     var p = js.Lib.document.getElementById("a_" + this.id + "_" + Std.string(t));
  5107.                     if(p != null) p.style.cssText = "text-align:left;width:100%;overflow: hidden;opacity:1;position:absolute;background:" + this.bgColor;
  5108.                 }
  5109.             }
  5110.             if(a != null && this.idx < this.slides.length + 1) a.style.cssText = "text-align:left;opacity: 0 ; -webkit-transition: 0.5s ease-out;width:100%;overflow: hidden;";
  5111.             if(this.idx > this.slides.length) this.idx = 1;
  5112.         }
  5113.     }
  5114.     ,stopTweener: function() {
  5115.         this.tweener.stop();
  5116.     }
  5117.     ,startTweener: function() {
  5118.         this.countOfClip = 50 * Std.parseInt(this.interval);
  5119.         this.tweener.onChange = $bind(this,this.onSlideChange);
  5120.         this.tweener.start(1000000);
  5121.     }
  5122.     ,__class__: core.SlideshowInfo
  5123. }
  5124. core.Tweener = function() {
  5125.     this.count = 0;
  5126.     this.maxCount = 0;
  5127. };
  5128. core.Tweener.__name__ = true;
  5129. core.Tweener.prototype = {
  5130.     onChangeInvoke: function() {
  5131.         this.count++;
  5132.         if(this.onChange == null) return;
  5133.         if(this.count > this.maxCount) return;
  5134.         this.onChange(this.count);
  5135.         this.run();
  5136.     }
  5137.     ,run: function() {
  5138.         if(this.count >= this.maxCount) return;
  5139.         haxe.Timer.delay($bind(this,this.onChangeInvoke),33);
  5140.     }
  5141.     ,stop: function() {
  5142.         this.maxCount = this.count;
  5143.     }
  5144.     ,start: function(max) {
  5145.         if(max == null) max = 1;
  5146.         this.maxCount = max;
  5147.         this.count = 0;
  5148.         this.run();
  5149.     }
  5150.     ,__class__: core.Tweener
  5151. }
  5152. core.VideoInfo = function() {
  5153.     this.pageLayoutType = 0;
  5154.     this.youtubeId = "";
  5155.     this.url = "";
  5156.     this.id = "";
  5157. };
  5158. core.VideoInfo.__name__ = true;
  5159. core.VideoInfo.prototype = {
  5160.     updateLayout: function(dom) {
  5161.         if(dom == null) return;
  5162.         var dp = this.getDrawParams();
  5163.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  5164.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  5165.         var ww = this.width * (dp.dw / dp.sw);
  5166.         var hh = this.height * (dp.dh / dp.sh);
  5167.         dom.style.left = Std.string(Math.round(xx)) + "px";
  5168.         dom.style.top = Std.string(Math.round(yy)) + "px";
  5169.         var videoDom = dom.firstChild;
  5170.         videoDom.width = Std.string(Math.round(ww));
  5171.         videoDom.height = Std.string(Math.round(hh));
  5172.     }
  5173.     ,toHtml: function() {
  5174.         var dp = this.getDrawParams();
  5175.         var xx = dp.dx + (this.x - dp.sx) * (dp.dw / dp.sw);
  5176.         var yy = dp.dy + (this.y - dp.sy) * (dp.dh / dp.sh);
  5177.         var ww = this.width * (dp.dw / dp.sw);
  5178.         var hh = this.height * (dp.dh / dp.sh);
  5179.         if(this.youtubeId != null && this.youtubeId != "") return core.HtmlHelper.toRectYoutubeVideoHtml(this,xx,yy,ww,hh); else return core.HtmlHelper.toRectVideoHtml(this,xx,yy,ww,hh);
  5180.     }
  5181.     ,getDrawParams: function() {
  5182.         var dp = RunTime.getDrawParams(this.pageLayoutType);
  5183.         var ctx = RunTime.flipBook.bookContext;
  5184.         dp.applyTransform(ctx.scale,ctx.offsetX,ctx.offsetY);
  5185.         return dp;
  5186.     }
  5187.     ,__class__: core.VideoInfo
  5188. }
  5189. core.ZoomStatus = { __ename__ : true, __constructs__ : ["normal","zooming","zoomed","zoomin","zoomout"] }
  5190. core.ZoomStatus.normal = ["normal",0];
  5191. core.ZoomStatus.normal.toString = $estr;
  5192. core.ZoomStatus.normal.__enum__ = core.ZoomStatus;
  5193. core.ZoomStatus.zooming = ["zooming",1];
  5194. core.ZoomStatus.zooming.toString = $estr;
  5195. core.ZoomStatus.zooming.__enum__ = core.ZoomStatus;
  5196. core.ZoomStatus.zoomed = ["zoomed",2];
  5197. core.ZoomStatus.zoomed.toString = $estr;
  5198. core.ZoomStatus.zoomed.__enum__ = core.ZoomStatus;
  5199. core.ZoomStatus.zoomin = ["zoomin",3];
  5200. core.ZoomStatus.zoomin.toString = $estr;
  5201. core.ZoomStatus.zoomin.__enum__ = core.ZoomStatus;
  5202. core.ZoomStatus.zoomout = ["zoomout",4];
  5203. core.ZoomStatus.zoomout.toString = $estr;
  5204. core.ZoomStatus.zoomout.__enum__ = core.ZoomStatus;
  5205. var haxe = haxe || {}
  5206. haxe.BaseCode = function(base) {
  5207.     var len = base.length;
  5208.     var nbits = 1;
  5209.     while(len > 1 << nbits) nbits++;
  5210.     if(nbits > 8 || len != 1 << nbits) throw "BaseCode : base length must be a power of two.";
  5211.     this.base = base;
  5212.     this.nbits = nbits;
  5213. };
  5214. haxe.BaseCode.__name__ = true;
  5215. haxe.BaseCode.encode = function(s,base) {
  5216.     var b = new haxe.BaseCode(haxe.io.Bytes.ofString(base));
  5217.     return b.encodeString(s);
  5218. }
  5219. haxe.BaseCode.decode = function(s,base) {
  5220.     var b = new haxe.BaseCode(haxe.io.Bytes.ofString(base));
  5221.     return b.decodeString(s);
  5222. }
  5223. haxe.BaseCode.prototype = {
  5224.     decodeString: function(s) {
  5225.         return this.decodeBytes(haxe.io.Bytes.ofString(s)).toString();
  5226.     }
  5227.     ,encodeString: function(s) {
  5228.         return this.encodeBytes(haxe.io.Bytes.ofString(s)).toString();
  5229.     }
  5230.     ,decodeBytes: function(b) {
  5231.         var nbits = this.nbits;
  5232.         var base = this.base;
  5233.         if(this.tbl == null) this.initTable();
  5234.         var tbl = this.tbl;
  5235.         var size = b.length * nbits >> 3;
  5236.         var out = haxe.io.Bytes.alloc(size);
  5237.         var buf = 0;
  5238.         var curbits = 0;
  5239.         var pin = 0;
  5240.         var pout = 0;
  5241.         while(pout < size) {
  5242.             while(curbits < 8) {
  5243.                 curbits += nbits;
  5244.                 buf <<= nbits;
  5245.                 var i = tbl[b.b[pin++]];
  5246.                 if(i == -1) throw "BaseCode : invalid encoded char";
  5247.                 buf |= i;
  5248.             }
  5249.             curbits -= 8;
  5250.             out.b[pout++] = buf >> curbits & 255 & 255;
  5251.         }
  5252.         return out;
  5253.     }
  5254.     ,initTable: function() {
  5255.         var tbl = new Array();
  5256.         var _g = 0;
  5257.         while(_g < 256) {
  5258.             var i = _g++;
  5259.             tbl[i] = -1;
  5260.         }
  5261.         var _g1 = 0, _g = this.base.length;
  5262.         while(_g1 < _g) {
  5263.             var i = _g1++;
  5264.             tbl[this.base.b[i]] = i;
  5265.         }
  5266.         this.tbl = tbl;
  5267.     }
  5268.     ,encodeBytes: function(b) {
  5269.         var nbits = this.nbits;
  5270.         var base = this.base;
  5271.         var size = b.length * 8 / nbits | 0;
  5272.         var out = haxe.io.Bytes.alloc(size + (b.length * 8 % nbits == 0?0:1));
  5273.         var buf = 0;
  5274.         var curbits = 0;
  5275.         var mask = (1 << nbits) - 1;
  5276.         var pin = 0;
  5277.         var pout = 0;
  5278.         while(pout < size) {
  5279.             while(curbits < nbits) {
  5280.                 curbits += 8;
  5281.                 buf <<= 8;
  5282.                 buf |= b.b[pin++];
  5283.             }
  5284.             curbits -= nbits;
  5285.             out.b[pout++] = base.b[buf >> curbits & mask] & 255;
  5286.         }
  5287.         if(curbits > 0) out.b[pout++] = base.b[buf << nbits - curbits & mask] & 255;
  5288.         return out;
  5289.     }
  5290.     ,__class__: haxe.BaseCode
  5291. }
  5292. haxe.Http = function(url) {
  5293.     this.url = url;
  5294.     this.headers = new Hash();
  5295.     this.params = new Hash();
  5296.     this.async = true;
  5297. };
  5298. haxe.Http.__name__ = true;
  5299. haxe.Http.requestUrl = function(url) {
  5300.     var h = new haxe.Http(url);
  5301.     h.async = false;
  5302.     var r = null;
  5303.     h.onData = function(d) {
  5304.         r = d;
  5305.     };
  5306.     h.onError = function(e) {
  5307.         throw e;
  5308.     };
  5309.     h.request(false);
  5310.     return r;
  5311. }
  5312. haxe.Http.prototype = {
  5313.     onStatus: function(status) {
  5314.     }
  5315.     ,onError: function(msg) {
  5316.     }
  5317.     ,onData: function(data) {
  5318.     }
  5319.     ,request: function(post) {
  5320.         var me = this;
  5321.         var r = new js.XMLHttpRequest();
  5322.         var onreadystatechange = function() {
  5323.             if(r.readyState != 4) return;
  5324.             var s = (function($this) {
  5325.                 var $r;
  5326.                 try {
  5327.                     $r = r.status;
  5328.                 } catch( e ) {
  5329.                     $r = null;
  5330.                 }
  5331.                 return $r;
  5332.             }(this));
  5333.             if(s == undefined) s = null;
  5334.             if(s != null) me.onStatus(s);
  5335.             if(s != null && s >= 200 && s < 400) me.onData(r.responseText); else switch(s) {
  5336.             case null: case undefined:
  5337.                 me.onError("Failed to connect or resolve host");
  5338.                 break;
  5339.             case 12029:
  5340.                 me.onError("Failed to connect to host");
  5341.                 break;
  5342.             case 12007:
  5343.                 me.onError("Unknown host");
  5344.                 break;
  5345.             default:
  5346.                 me.onError("Http Error #" + r.status);
  5347.             }
  5348.         };
  5349.         if(this.async) r.onreadystatechange = onreadystatechange;
  5350.         var uri = this.postData;
  5351.         if(uri != null) post = true; else {
  5352.             var $it0 = this.params.keys();
  5353.             while( $it0.hasNext() ) {
  5354.                 var p = $it0.next();
  5355.                 if(uri == null) uri = ""; else uri += "&";
  5356.                 uri += StringTools.urlEncode(p) + "=" + StringTools.urlEncode(this.params.get(p));
  5357.             }
  5358.         }
  5359.         try {
  5360.             if(post) r.open("POST",this.url,this.async); else if(uri != null) {
  5361.                 var question = this.url.split("?").length <= 1;
  5362.                 r.open("GET",this.url + (question?"?":"&") + uri,this.async);
  5363.                 uri = null;
  5364.             } else r.open("GET",this.url,this.async);
  5365.         } catch( e ) {
  5366.             this.onError(e.toString());
  5367.             return;
  5368.         }
  5369.         if(this.headers.get("Content-Type") == null && post && this.postData == null) r.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  5370.         var $it1 = this.headers.keys();
  5371.         while( $it1.hasNext() ) {
  5372.             var h = $it1.next();
  5373.             r.setRequestHeader(h,this.headers.get(h));
  5374.         }
  5375.         r.send(uri);
  5376.         if(!this.async) onreadystatechange();
  5377.     }
  5378.     ,setPostData: function(data) {
  5379.         this.postData = data;
  5380.     }
  5381.     ,setParameter: function(param,value) {
  5382.         this.params.set(param,value);
  5383.     }
  5384.     ,setHeader: function(header,value) {
  5385.         this.headers.set(header,value);
  5386.     }
  5387.     ,__class__: haxe.Http
  5388. }
  5389. haxe.Log = function() { }
  5390. haxe.Log.__name__ = true;
  5391. haxe.Log.trace = function(v,infos) {
  5392.     js.Boot.__trace(v,infos);
  5393. }
  5394. haxe.Log.clear = function() {
  5395.     js.Boot.__clear_trace();
  5396. }
  5397. haxe.Timer = function(time_ms) {
  5398.     var me = this;
  5399.     this.id = window.setInterval(function() {
  5400.         me.run();
  5401.     },time_ms);
  5402. };
  5403. haxe.Timer.__name__ = true;
  5404. haxe.Timer.delay = function(f,time_ms) {
  5405.     var t = new haxe.Timer(time_ms);
  5406.     t.run = function() {
  5407.         t.stop();
  5408.         f();
  5409.     };
  5410.     return t;
  5411. }
  5412. haxe.Timer.measure = function(f,pos) {
  5413.     var t0 = haxe.Timer.stamp();
  5414.     var r = f();
  5415.     haxe.Log.trace(haxe.Timer.stamp() - t0 + "s",pos);
  5416.     return r;
  5417. }
  5418. haxe.Timer.stamp = function() {
  5419.     return new Date().getTime() / 1000;
  5420. }
  5421. haxe.Timer.prototype = {
  5422.     run: function() {
  5423.     }
  5424.     ,stop: function() {
  5425.         if(this.id == null) return;
  5426.         window.clearInterval(this.id);
  5427.         this.id = null;
  5428.     }
  5429.     ,__class__: haxe.Timer
  5430. }
  5431. if(!haxe.io) haxe.io = {}
  5432. haxe.io.Bytes = function(length,b) {
  5433.     this.length = length;
  5434.     this.b = b;
  5435. };
  5436. haxe.io.Bytes.__name__ = true;
  5437. haxe.io.Bytes.alloc = function(length) {
  5438.     var a = new Array();
  5439.     var _g = 0;
  5440.     while(_g < length) {
  5441.         var i = _g++;
  5442.         a.push(0);
  5443.     }
  5444.     return new haxe.io.Bytes(length,a);
  5445. }
  5446. haxe.io.Bytes.ofString = function(s) {
  5447.     var a = new Array();
  5448.     var _g1 = 0, _g = s.length;
  5449.     while(_g1 < _g) {
  5450.         var i = _g1++;
  5451.         var c = s.charCodeAt(i);
  5452.         if(c <= 127) a.push(c); else if(c <= 2047) {
  5453.             a.push(192 | c >> 6);
  5454.             a.push(128 | c & 63);
  5455.         } else if(c <= 65535) {
  5456.             a.push(224 | c >> 12);
  5457.             a.push(128 | c >> 6 & 63);
  5458.             a.push(128 | c & 63);
  5459.         } else {
  5460.             a.push(240 | c >> 18);
  5461.             a.push(128 | c >> 12 & 63);
  5462.             a.push(128 | c >> 6 & 63);
  5463.             a.push(128 | c & 63);
  5464.         }
  5465.     }
  5466.     return new haxe.io.Bytes(a.length,a);
  5467. }
  5468. haxe.io.Bytes.ofData = function(b) {
  5469.     return new haxe.io.Bytes(b.length,b);
  5470. }
  5471. haxe.io.Bytes.prototype = {
  5472.     getData: function() {
  5473.         return this.b;
  5474.     }
  5475.     ,toHex: function() {
  5476.         var s = new StringBuf();
  5477.         var chars = [];
  5478.         var str = "0123456789abcdef";
  5479.         var _g1 = 0, _g = str.length;
  5480.         while(_g1 < _g) {
  5481.             var i = _g1++;
  5482.             chars.push(HxOverrides.cca(str,i));
  5483.         }
  5484.         var _g1 = 0, _g = this.length;
  5485.         while(_g1 < _g) {
  5486.             var i = _g1++;
  5487.             var c = this.b[i];
  5488.             s.b += String.fromCharCode(chars[c >> 4]);
  5489.             s.b += String.fromCharCode(chars[c & 15]);
  5490.         }
  5491.         return s.b;
  5492.     }
  5493.     ,toString: function() {
  5494.         return this.readString(0,this.length);
  5495.     }
  5496.     ,readString: function(pos,len) {
  5497.         if(pos < 0 || len < 0 || pos + len > this.length) throw haxe.io.Error.OutsideBounds;
  5498.         var s = "";
  5499.         var b = this.b;
  5500.         var fcc = String.fromCharCode;
  5501.         var i = pos;
  5502.         var max = pos + len;
  5503.         while(i < max) {
  5504.             var c = b[i++];
  5505.             if(c < 128) {
  5506.                 if(c == 0) break;
  5507.                 s += fcc(c);
  5508.             } else if(c < 224) s += fcc((c & 63) << 6 | b[i++] & 127); else if(c < 240) {
  5509.                 var c2 = b[i++];
  5510.                 s += fcc((c & 31) << 12 | (c2 & 127) << 6 | b[i++] & 127);
  5511.             } else {
  5512.                 var c2 = b[i++];
  5513.                 var c3 = b[i++];
  5514.                 s += fcc((c & 15) << 18 | (c2 & 127) << 12 | c3 << 6 & 127 | b[i++] & 127);
  5515.             }
  5516.         }
  5517.         return s;
  5518.     }
  5519.     ,compare: function(other) {
  5520.         var b1 = this.b;
  5521.         var b2 = other.b;
  5522.         var len = this.length < other.length?this.length:other.length;
  5523.         var _g = 0;
  5524.         while(_g < len) {
  5525.             var i = _g++;
  5526.             if(b1[i] != b2[i]) return b1[i] - b2[i];
  5527.         }
  5528.         return this.length - other.length;
  5529.     }
  5530.     ,sub: function(pos,len) {
  5531.         if(pos < 0 || len < 0 || pos + len > this.length) throw haxe.io.Error.OutsideBounds;
  5532.         return new haxe.io.Bytes(len,this.b.slice(pos,pos + len));
  5533.     }
  5534.     ,blit: function(pos,src,srcpos,len) {
  5535.         if(pos < 0 || srcpos < 0 || len < 0 || pos + len > this.length || srcpos + len > src.length) throw haxe.io.Error.OutsideBounds;
  5536.         var b1 = this.b;
  5537.         var b2 = src.b;
  5538.         if(b1 == b2 && pos > srcpos) {
  5539.             var i = len;
  5540.             while(i > 0) {
  5541.                 i--;
  5542.                 b1[i + pos] = b2[i + srcpos];
  5543.             }
  5544.             return;
  5545.         }
  5546.         var _g = 0;
  5547.         while(_g < len) {
  5548.             var i = _g++;
  5549.             b1[i + pos] = b2[i + srcpos];
  5550.         }
  5551.     }
  5552.     ,set: function(pos,v) {
  5553.         this.b[pos] = v & 255;
  5554.     }
  5555.     ,get: function(pos) {
  5556.         return this.b[pos];
  5557.     }
  5558.     ,__class__: haxe.io.Bytes
  5559. }
  5560. haxe.io.Error = { __ename__ : true, __constructs__ : ["Blocked","Overflow","OutsideBounds","Custom"] }
  5561. haxe.io.Error.Blocked = ["Blocked",0];
  5562. haxe.io.Error.Blocked.toString = $estr;
  5563. haxe.io.Error.Blocked.__enum__ = haxe.io.Error;
  5564. haxe.io.Error.Overflow = ["Overflow",1];
  5565. haxe.io.Error.Overflow.toString = $estr;
  5566. haxe.io.Error.Overflow.__enum__ = haxe.io.Error;
  5567. haxe.io.Error.OutsideBounds = ["OutsideBounds",2];
  5568. haxe.io.Error.OutsideBounds.toString = $estr;
  5569. haxe.io.Error.OutsideBounds.__enum__ = haxe.io.Error;
  5570. haxe.io.Error.Custom = function(e) { var $x = ["Custom",3,e]; $x.__enum__ = haxe.io.Error; $x.toString = $estr; return $x; }
  5571. if(!haxe.web) haxe.web = {}
  5572. haxe.web.Request = function() { }
  5573. haxe.web.Request.__name__ = true;
  5574. haxe.web.Request.getParams = function() {
  5575.     var get = window.location.search.substr(1);
  5576.     var params = new Hash();
  5577.     var _g = 0, _g1 = new EReg("[&;]","g").split(get);
  5578.     while(_g < _g1.length) {
  5579.         var p = _g1[_g];
  5580.         ++_g;
  5581.         var pl = p.split("=");
  5582.         if(pl.length < 2) continue;
  5583.         var name = pl.shift();
  5584.         params.set(StringTools.urlDecode(name),StringTools.urlDecode(pl.join("=")));
  5585.     }
  5586.     return params;
  5587. }
  5588. haxe.web.Request.getHostName = function() {
  5589.     return window.location.host;
  5590. }
  5591. haxe.web.Request.getURI = function() {
  5592.     return window.location.pathname;
  5593. }
  5594. if(!haxe.xml) haxe.xml = {}
  5595. haxe.xml.Parser = function() { }
  5596. haxe.xml.Parser.__name__ = true;
  5597. haxe.xml.Parser.parse = function(str) {
  5598.     var doc = Xml.createDocument();
  5599.     haxe.xml.Parser.doParse(str,0,doc);
  5600.     return doc;
  5601. }
  5602. haxe.xml.Parser.doParse = function(str,p,parent) {
  5603.     if(p == null) p = 0;
  5604.     var xml = null;
  5605.     var state = 1;
  5606.     var next = 1;
  5607.     var aname = null;
  5608.     var start = 0;
  5609.     var nsubs = 0;
  5610.     var nbrackets = 0;
  5611.     var c = str.charCodeAt(p);
  5612.     while(!(c != c)) {
  5613.         switch(state) {
  5614.         case 0:
  5615.             switch(c) {
  5616.             case 10:case 13:case 9:case 32:
  5617.                 break;
  5618.             default:
  5619.                 state = next;
  5620.                 continue;
  5621.             }
  5622.             break;
  5623.         case 1:
  5624.             switch(c) {
  5625.             case 60:
  5626.                 state = 0;
  5627.                 next = 2;
  5628.                 break;
  5629.             default:
  5630.                 start = p;
  5631.                 state = 13;
  5632.                 continue;
  5633.             }
  5634.             break;
  5635.         case 13:
  5636.             if(c == 60) {
  5637.                 var child = Xml.createPCData(HxOverrides.substr(str,start,p - start));
  5638.                 parent.addChild(child);
  5639.                 nsubs++;
  5640.                 state = 0;
  5641.                 next = 2;
  5642.             }
  5643.             break;
  5644.         case 17:
  5645.             if(c == 93 && str.charCodeAt(p + 1) == 93 && str.charCodeAt(p + 2) == 62) {
  5646.                 var child = Xml.createCData(HxOverrides.substr(str,start,p - start));
  5647.                 parent.addChild(child);
  5648.                 nsubs++;
  5649.                 p += 2;
  5650.                 state = 1;
  5651.             }
  5652.             break;
  5653.         case 2:
  5654.             switch(c) {
  5655.             case 33:
  5656.                 if(str.charCodeAt(p + 1) == 91) {
  5657.                     p += 2;
  5658.                     if(HxOverrides.substr(str,p,6).toUpperCase() != "CDATA[") throw "Expected <![CDATA[";
  5659.                     p += 5;
  5660.                     state = 17;
  5661.                     start = p + 1;
  5662.                 } else if(str.charCodeAt(p + 1) == 68 || str.charCodeAt(p + 1) == 100) {
  5663.                     if(HxOverrides.substr(str,p + 2,6).toUpperCase() != "OCTYPE") throw "Expected <!DOCTYPE";
  5664.                     p += 8;
  5665.                     state = 16;
  5666.                     start = p + 1;
  5667.                 } else if(str.charCodeAt(p + 1) != 45 || str.charCodeAt(p + 2) != 45) throw "Expected <!--"; else {
  5668.                     p += 2;
  5669.                     state = 15;
  5670.                     start = p + 1;
  5671.                 }
  5672.                 break;
  5673.             case 63:
  5674.                 state = 14;
  5675.                 start = p;
  5676.                 break;
  5677.             case 47:
  5678.                 if(parent == null) throw "Expected node name";
  5679.                 start = p + 1;
  5680.                 state = 0;
  5681.                 next = 10;
  5682.                 break;
  5683.             default:
  5684.                 state = 3;
  5685.                 start = p;
  5686.                 continue;
  5687.             }
  5688.             break;
  5689.         case 3:
  5690.             if(!(c >= 97 && c <= 122 || c >= 65 && c <= 90 || c >= 48 && c <= 57 || c == 58 || c == 46 || c == 95 || c == 45)) {
  5691.                 if(p == start) throw "Expected node name";
  5692.                 xml = Xml.createElement(HxOverrides.substr(str,start,p - start));
  5693.                 parent.addChild(xml);
  5694.                 state = 0;
  5695.                 next = 4;
  5696.                 continue;
  5697.             }
  5698.             break;
  5699.         case 4:
  5700.             switch(c) {
  5701.             case 47:
  5702.                 state = 11;
  5703.                 nsubs++;
  5704.                 break;
  5705.             case 62:
  5706.                 state = 9;
  5707.                 nsubs++;
  5708.                 break;
  5709.             default:
  5710.                 state = 5;
  5711.                 start = p;
  5712.                 continue;
  5713.             }
  5714.             break;
  5715.         case 5:
  5716.             if(!(c >= 97 && c <= 122 || c >= 65 && c <= 90 || c >= 48 && c <= 57 || c == 58 || c == 46 || c == 95 || c == 45)) {
  5717.                 var tmp;
  5718.                 if(start == p) throw "Expected attribute name";
  5719.                 tmp = HxOverrides.substr(str,start,p - start);
  5720.                 aname = tmp;
  5721.                 if(xml.exists(aname)) throw "Duplicate attribute";
  5722.                 state = 0;
  5723.                 next = 6;
  5724.                 continue;
  5725.             }
  5726.             break;
  5727.         case 6:
  5728.             switch(c) {
  5729.             case 61:
  5730.                 state = 0;
  5731.                 next = 7;
  5732.                 break;
  5733.             default:
  5734.                 throw "Expected =";
  5735.             }
  5736.             break;
  5737.         case 7:
  5738.             switch(c) {
  5739.             case 34:case 39:
  5740.                 state = 8;
  5741.                 start = p;
  5742.                 break;
  5743.             default:
  5744.                 throw "Expected \"";
  5745.             }
  5746.             break;
  5747.         case 8:
  5748.             if(c == str.charCodeAt(start)) {
  5749.                 var val = HxOverrides.substr(str,start + 1,p - start - 1);
  5750.                 xml.set(aname,val);
  5751.                 state = 0;
  5752.                 next = 4;
  5753.             }
  5754.             break;
  5755.         case 9:
  5756.             p = haxe.xml.Parser.doParse(str,p,xml);
  5757.             start = p;
  5758.             state = 1;
  5759.             break;
  5760.         case 11:
  5761.             switch(c) {
  5762.             case 62:
  5763.                 state = 1;
  5764.                 break;
  5765.             default:
  5766.                 throw "Expected >";
  5767.             }
  5768.             break;
  5769.         case 12:
  5770.             switch(c) {
  5771.             case 62:
  5772.                 if(nsubs == 0) parent.addChild(Xml.createPCData(""));
  5773.                 return p;
  5774.             default:
  5775.                 throw "Expected >";
  5776.             }
  5777.             break;
  5778.         case 10:
  5779.             if(!(c >= 97 && c <= 122 || c >= 65 && c <= 90 || c >= 48 && c <= 57 || c == 58 || c == 46 || c == 95 || c == 45)) {
  5780.                 if(start == p) throw "Expected node name";
  5781.                 var v = HxOverrides.substr(str,start,p - start);
  5782.                 if(v != parent.getNodeName()) throw "Expected </" + parent.getNodeName() + ">";
  5783.                 state = 0;
  5784.                 next = 12;
  5785.                 continue;
  5786.             }
  5787.             break;
  5788.         case 15:
  5789.             if(c == 45 && str.charCodeAt(p + 1) == 45 && str.charCodeAt(p + 2) == 62) {
  5790.                 parent.addChild(Xml.createComment(HxOverrides.substr(str,start,p - start)));
  5791.                 p += 2;
  5792.                 state = 1;
  5793.             }
  5794.             break;
  5795.         case 16:
  5796.             if(c == 91) nbrackets++; else if(c == 93) nbrackets--; else if(c == 62 && nbrackets == 0) {
  5797.                 parent.addChild(Xml.createDocType(HxOverrides.substr(str,start,p - start)));
  5798.                 state = 1;
  5799.             }
  5800.             break;
  5801.         case 14:
  5802.             if(c == 63 && str.charCodeAt(p + 1) == 62) {
  5803.                 p++;
  5804.                 var str1 = HxOverrides.substr(str,start + 1,p - start - 2);
  5805.                 parent.addChild(Xml.createProlog(str1));
  5806.                 state = 1;
  5807.             }
  5808.             break;
  5809.         }
  5810.         c = str.charCodeAt(++p);
  5811.     }
  5812.     if(state == 1) {
  5813.         start = p;
  5814.         state = 13;
  5815.     }
  5816.     if(state == 13) {
  5817.         if(p != start || nsubs == 0) parent.addChild(Xml.createPCData(HxOverrides.substr(str,start,p - start)));
  5818.         return p;
  5819.     }
  5820.     throw "Unexpected end";
  5821. }
  5822. haxe.xml.Parser.isValidChar = function(c) {
  5823.     return c >= 97 && c <= 122 || c >= 65 && c <= 90 || c >= 48 && c <= 57 || c == 58 || c == 46 || c == 95 || c == 45;
  5824. }
  5825. var js = js || {}
  5826. js.Boot = function() { }
  5827. js.Boot.__name__ = true;
  5828. js.Boot.__unhtml = function(s) {
  5829.     return s.split("&").join("&").split("<").join("<").split(">").join(">");
  5830. }
  5831. js.Boot.__trace = function(v,i) {
  5832.     var msg = i != null?i.fileName + ":" + i.lineNumber + ": ":"";
  5833.     msg += js.Boot.__string_rec(v,"");
  5834.     var d;
  5835.     if(typeof(document) != "undefined" && (d = document.getElementById("haxe:trace")) != null) d.innerHTML += js.Boot.__unhtml(msg) + "<br/>"; else if(typeof(console) != "undefined" && console.log != null) console.log(msg);
  5836. }
  5837. js.Boot.__clear_trace = function() {
  5838.     var d = document.getElementById("haxe:trace");
  5839.     if(d != null) d.innerHTML = "";
  5840. }
  5841. js.Boot.isClass = function(o) {
  5842.     return o.__name__;
  5843. }
  5844. js.Boot.isEnum = function(e) {
  5845.     return e.__ename__;
  5846. }
  5847. js.Boot.getClass = function(o) {
  5848.     return o.__class__;
  5849. }
  5850. js.Boot.__string_rec = function(o,s) {
  5851.     if(o == null) return "null";
  5852.     if(s.length >= 5) return "<...>";
  5853.     var t = typeof(o);
  5854.     if(t == "function" && (o.__name__ || o.__ename__)) t = "object";
  5855.     switch(t) {
  5856.     case "object":
  5857.         if(o instanceof Array) {
  5858.             if(o.__enum__) {
  5859.                 if(o.length == 2) return o[0];
  5860.                 var str = o[0] + "(";
  5861.                 s += "\t";
  5862.                 var _g1 = 2, _g = o.length;
  5863.                 while(_g1 < _g) {
  5864.                     var i = _g1++;
  5865.                     if(i != 2) str += "," + js.Boot.__string_rec(o[i],s); else str += js.Boot.__string_rec(o[i],s);
  5866.                 }
  5867.                 return str + ")";
  5868.             }
  5869.             var l = o.length;
  5870.             var i;
  5871.             var str = "[";
  5872.             s += "\t";
  5873.             var _g = 0;
  5874.             while(_g < l) {
  5875.                 var i1 = _g++;
  5876.                 str += (i1 > 0?",":"") + js.Boot.__string_rec(o[i1],s);
  5877.             }
  5878.             str += "]";
  5879.             return str;
  5880.         }
  5881.         var tostr;
  5882.         try {
  5883.             tostr = o.toString;
  5884.         } catch( e ) {
  5885.             return "???";
  5886.         }
  5887.         if(tostr != null && tostr != Object.toString) {
  5888.             var s2 = o.toString();
  5889.             if(s2 != "[object Object]") return s2;
  5890.         }
  5891.         var k = null;
  5892.         var str = "{\n";
  5893.         s += "\t";
  5894.         var hasp = o.hasOwnProperty != null;
  5895.         for( var k in o ) { ;
  5896.         if(hasp && !o.hasOwnProperty(k)) {
  5897.             continue;
  5898.         }
  5899.         if(k == "prototype" || k == "__class__" || k == "__super__" || k == "__interfaces__" || k == "__properties__") {
  5900.             continue;
  5901.         }
  5902.         if(str.length != 2) str += ", \n";
  5903.         str += s + k + " : " + js.Boot.__string_rec(o[k],s);
  5904.         }
  5905.         s = s.substring(1);
  5906.         str += "\n" + s + "}";
  5907.         return str;
  5908.     case "function":
  5909.         return "<function>";
  5910.     case "string":
  5911.         return o;
  5912.     default:
  5913.         return String(o);
  5914.     }
  5915. }
  5916. js.Boot.__interfLoop = function(cc,cl) {
  5917.     if(cc == null) return false;
  5918.     if(cc == cl) return true;
  5919.     var intf = cc.__interfaces__;
  5920.     if(intf != null) {
  5921.         var _g1 = 0, _g = intf.length;
  5922.         while(_g1 < _g) {
  5923.             var i = _g1++;
  5924.             var i1 = intf[i];
  5925.             if(i1 == cl || js.Boot.__interfLoop(i1,cl)) return true;
  5926.         }
  5927.     }
  5928.     return js.Boot.__interfLoop(cc.__super__,cl);
  5929. }
  5930. js.Boot.__instanceof = function(o,cl) {
  5931.     try {
  5932.         if(o instanceof cl) {
  5933.             if(cl == Array) return o.__enum__ == null;
  5934.             return true;
  5935.         }
  5936.         if(js.Boot.__interfLoop(o.__class__,cl)) return true;
  5937.     } catch( e ) {
  5938.         if(cl == null) return false;
  5939.     }
  5940.     switch(cl) {
  5941.     case Int:
  5942.         return Math.ceil(o%2147483648.0) === o;
  5943.     case Float:
  5944.         return typeof(o) == "number";
  5945.     case Bool:
  5946.         return o === true || o === false;
  5947.     case String:
  5948.         return typeof(o) == "string";
  5949.     case Dynamic:
  5950.         return true;
  5951.     default:
  5952.         if(o == null) return false;
  5953.         if(cl == Class && o.__name__ != null) return true; else null;
  5954.         if(cl == Enum && o.__ename__ != null) return true; else null;
  5955.         return o.__enum__ == cl;
  5956.     }
  5957. }
  5958. js.Boot.__cast = function(o,t) {
  5959.     if(js.Boot.__instanceof(o,t)) return o; else throw "Cannot cast " + Std.string(o) + " to " + Std.string(t);
  5960. }
  5961. js.Lib = function() { }
  5962. js.Lib.__name__ = true;
  5963. js.Lib.debug = function() {
  5964.     debugger;
  5965. }
  5966. js.Lib.alert = function(v) {
  5967.     alert(js.Boot.__string_rec(v,""));
  5968. }
  5969. js.Lib.eval = function(code) {
  5970.     return eval(code);
  5971. }
  5972. js.Lib.setErrorHandler = function(f) {
  5973.     js.Lib.onerror = f;
  5974. }
  5975. var orc = orc || {}
  5976. if(!orc.utils) orc.utils = {}
  5977. orc.utils.DrawHelper = function() { }
  5978. orc.utils.DrawHelper.__name__ = true;
  5979. orc.utils.DrawHelper.createFillStyle = function(cssStyleColor,alpha) {
  5980.     cssStyleColor = StringTools.replace(cssStyleColor,"0x","");
  5981.     cssStyleColor = StringTools.replace(cssStyleColor,"0X","");
  5982.     cssStyleColor = StringTools.replace(cssStyleColor,"#","");
  5983.     if(cssStyleColor.length == 6) {
  5984.         var r = Std.string(Std.parseInt("0x" + HxOverrides.substr(cssStyleColor,0,2)));
  5985.         var g = Std.string(Std.parseInt("0x" + HxOverrides.substr(cssStyleColor,2,2)));
  5986.         var b = Std.string(Std.parseInt("0x" + HxOverrides.substr(cssStyleColor,4,2)));
  5987.         return "rgba(" + r + "," + g + "," + b + "," + Std.string(alpha) + ")";
  5988.     }
  5989.     return "";
  5990. }
  5991. orc.utils.ImageMetricHelper = function(imgWidth,imgHeight) {
  5992.     this.width = imgWidth;
  5993.     this.height = imgHeight;
  5994.     this.diagonalLineTheta = Math.atan2(this.width,this.height);
  5995.     this.diagonalLineLength = Math.sqrt(this.width * this.width + this.height * this.height);
  5996. };
  5997. orc.utils.ImageMetricHelper.__name__ = true;
  5998. orc.utils.ImageMetricHelper.prototype = {
  5999.     getMaxFitScale: function(width,height,rotation) {
  6000.         if(rotation == null) rotation = 0;
  6001.         var scaleX;
  6002.         var scaleY;
  6003.         if(rotation == 0 || rotation == 180) {
  6004.             scaleX = width / this.width;
  6005.             scaleY = height / this.height;
  6006.         } else {
  6007.             var r = Math.PI * rotation / 180;
  6008.             var t0 = this.diagonalLineTheta + r;
  6009.             var w0 = Math.abs(this.diagonalLineLength * Math.sin(t0));
  6010.             var h0 = Math.abs(this.diagonalLineLength * Math.cos(t0));
  6011.             var t1 = -this.diagonalLineTheta + r;
  6012.             var w1 = Math.abs(this.diagonalLineLength * Math.sin(t1));
  6013.             var h1 = Math.abs(this.diagonalLineLength * Math.cos(t1));
  6014.             var w = Math.max(w0,w1);
  6015.             var h = Math.max(h0,h1);
  6016.             scaleX = width / w;
  6017.             scaleY = height / h;
  6018.         }
  6019.         return Math.min(scaleX,scaleY);
  6020.     }
  6021.     ,__class__: orc.utils.ImageMetricHelper
  6022. }
  6023. orc.utils.UrlParam = function() {
  6024. };
  6025. orc.utils.UrlParam.__name__ = true;
  6026. orc.utils.UrlParam.prototype = {
  6027.     __class__: orc.utils.UrlParam
  6028. }
  6029. orc.utils.Util = function() { }
  6030. orc.utils.Util.__name__ = true;
  6031. orc.utils.Util.request = function(url,call,onError) {
  6032.     var http = new haxe.Http(url);
  6033.     http.onData = call;
  6034.     http.onError = function(e) {
  6035.         if(onError != null) onError();
  6036.     };
  6037.     http.request(false);
  6038. }
  6039. orc.utils.Util.getUrlParam = function(key) {
  6040.     var params = orc.utils.Util.getUrlParams();
  6041.     var _g = 0;
  6042.     while(_g < params.length) {
  6043.         var param = params[_g];
  6044.         ++_g;
  6045.         var p = param;
  6046.         if(p.key == key) return p.value;
  6047.     }
  6048.     return "";
  6049. }
  6050. orc.utils.Util.getUrlParams = function() {
  6051.     var url = js.Lib.window.location.href;
  6052.     var results = new Array();
  6053.     var index = url.indexOf("?");
  6054.     if(index > 0) {
  6055.         var params = HxOverrides.substr(url,index + 1,null);
  6056.         var lines = params.split("&");
  6057.         var _g = 0;
  6058.         while(_g < lines.length) {
  6059.             var line = lines[_g];
  6060.             ++_g;
  6061.             var terms = line.split("=");
  6062.             if(terms.length == 2) {
  6063.                 var val = new orc.utils.UrlParam();
  6064.                 val.key = terms[0];
  6065.                 val.value = terms[1];
  6066.                 results.push(val);
  6067.             }
  6068.         }
  6069.     }
  6070.     return results;
  6071. }
  6072. orc.utils.Util.getXmlChilds = function(xml) {
  6073.     var i = xml.elements();
  6074.     var list = new Array();
  6075.     while(i.hasNext() == true) {
  6076.         var node = i.next();
  6077.         list.push(node);
  6078.     }
  6079.     return list;
  6080. }
  6081. orc.utils.Util.searchPos = function(txt,keyword) {
  6082.     var list = [];
  6083.     var index = -1;
  6084.     while(true) {
  6085.         var from = 0;
  6086.         if(index != -1) {
  6087.             from = index + keyword.length;
  6088.             if(from < 0) from = 0;
  6089.         }
  6090.         index = txt.indexOf(keyword,from);
  6091.         if(index > -1 && index + keyword.length <= txt.length) list.push(index); else break;
  6092.     }
  6093.     return list;
  6094. }
  6095. orc.utils.Util.createSearchResults = function(txt,keyword,posList,page) {
  6096.     var results = [];
  6097.     var maxChars = 50;
  6098.     var coloredWord = "<font color='#FF0000'>" + keyword + "</font>";
  6099.     var _g1 = 0, _g = posList.length;
  6100.     while(_g1 < _g) {
  6101.         var i = _g1++;
  6102.         var index = posList[i];
  6103.         var r = new core.SearchResult("",page);
  6104.         var offset = index;
  6105.         if(txt.length < maxChars) r.content = txt; else {
  6106.             var from = index - Math.max(0,maxChars - keyword.length) / 2 | 0;
  6107.             if(from < 0) from = 0;
  6108.             r.content = HxOverrides.substr(txt,from,maxChars);
  6109.             offset = index - from;
  6110.             if(from + maxChars < txt.length) r.content += " ...";
  6111.             if(from > 0) {
  6112.                 r.content = "... " + r.content;
  6113.                 offset += 4;
  6114.             }
  6115.         }
  6116.         r.content = HxOverrides.substr(r.content,0,offset) + "<font color='#FF0000'>" + HxOverrides.substr(r.content,offset,keyword.length) + "</font>" + HxOverrides.substr(r.content,offset + keyword.length,null);
  6117.         results.push(r);
  6118.     }
  6119.     return results;
  6120. }
  6121. var $_;
  6122. function $bind(o,m) { var f = function(){ return f.method.apply(f.scope, arguments); }; f.scope = o; f.method = m; return f; };
  6123. if(Array.prototype.indexOf) HxOverrides.remove = function(a,o) {
  6124.     var i = a.indexOf(o);
  6125.     if(i == -1) return false;
  6126.     a.splice(i,1);
  6127.     return true;
  6128. }; else null;
  6129. Math.__name__ = ["Math"];
  6130. Math.NaN = Number.NaN;
  6131. Math.NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY;
  6132. Math.POSITIVE_INFINITY = Number.POSITIVE_INFINITY;
  6133. Math.isFinite = function(i) {
  6134.     return isFinite(i);
  6135. };
  6136. Math.isNaN = function(i) {
  6137.     return isNaN(i);
  6138. };
  6139. String.prototype.__class__ = String;
  6140. String.__name__ = true;
  6141. Array.prototype.__class__ = Array;
  6142. Array.__name__ = true;
  6143. Date.prototype.__class__ = Date;
  6144. Date.__name__ = ["Date"];
  6145. var Int = { __name__ : ["Int"]};
  6146. var Dynamic = { __name__ : ["Dynamic"]};
  6147. var Float = Number;
  6148. Float.__name__ = ["Float"];
  6149. var Bool = Boolean;
  6150. Bool.__ename__ = ["Bool"];
  6151. var Class = { __name__ : ["Class"]};
  6152. var Enum = { };
  6153. var Void = { __ename__ : ["Void"]};
  6154. Xml.Element = "element";
  6155. Xml.PCData = "pcdata";
  6156. Xml.CData = "cdata";
  6157. Xml.Comment = "comment";
  6158. Xml.DocType = "doctype";
  6159. Xml.Prolog = "prolog";
  6160. Xml.Document = "document";
  6161. if(typeof document != "undefined") js.Lib.document = document;
  6162. if(typeof window != "undefined") {
  6163.     js.Lib.window = window;
  6164.     js.Lib.window.onerror = function(msg,url,line) {
  6165.         var f = js.Lib.onerror;
  6166.         if(f == null) return false;
  6167.         return f(msg,[url + ":" + line]);
  6168.     };
  6169. }
  6170. js.XMLHttpRequest = window.XMLHttpRequest?XMLHttpRequest:window.ActiveXObject?function() {
  6171.     try {
  6172.         return new ActiveXObject("Msxml2.XMLHTTP");
  6173.     } catch( e ) {
  6174.         try {
  6175.             return new ActiveXObject("Microsoft.XMLHTTP");
  6176.         } catch( e1 ) {
  6177.             throw "Unable to create XMLHttpRequest object.";
  6178.         }
  6179.     }
  6180. }:(function($this) {
  6181.     var $r;
  6182.     throw "Unable to create XMLHttpRequest object.";
  6183.     return $r;
  6184. }(this));
  6185. L.instance = new Hash();
  6186. RunTime.useGoogleUaAsLogViewer = true;
  6187. RunTime.urlIndex = "html5forwebkit.html";
  6188. RunTime.urlZoom = "zoom.html";
  6189. RunTime.urlRoot = "";
  6190. RunTime.urlBookinfo = RunTime.urlRoot + "data/bookinfo.xml";
  6191. RunTime.urlPageInfo = RunTime.urlRoot + "data/pages.xml";
  6192. RunTime.urlHotlinks = RunTime.urlRoot + "data/hotlinks.xml";
  6193. RunTime.urlContents = RunTime.urlRoot + "data/contents.xml";
  6194. RunTime.urlSearch = RunTime.urlRoot + "data/search.xml";
  6195. RunTime.urlVideos = RunTime.urlRoot + "data/videos.xml";
  6196. RunTime.urlButtons = RunTime.urlRoot + "data/buttons.xml";
  6197. RunTime.urlAudios = RunTime.urlRoot + "data/sounds.xml";
  6198. RunTime.urlLang = RunTime.urlRoot + "data/languages/languages.xml";
  6199. RunTime.urlSlideshow = RunTime.urlRoot + "data/slideshow.xml";
  6200. RunTime.urlShareInfo = RunTime.urlRoot + "data/share.xml";
  6201. RunTime.searchHtmlCache = "";
  6202. RunTime.inputHtmlCache = "";
  6203. RunTime.languages = new Array();
  6204. RunTime.book = new core.Book();
  6205. RunTime.singlePage = false;
  6206. RunTime.bookTop = 0;
  6207. RunTime.bookBottom = 0;
  6208. RunTime.bookLeft = 0;
  6209. RunTime.bookRight = 0;
  6210. RunTime.pcode = "";
  6211. RunTime.bottomBarAlpha = 0.6;
  6212. RunTime.bottomBarHeight = 40;
  6213. RunTime.autoflipButtonUnselectedAlpha = 0.5;
  6214. RunTime.doubleClickIntervalMs = 300;
  6215. RunTime.doubleZoomIntervalMs = 1000;
  6216. RunTime.highLights = new Array();
  6217. RunTime.notes = new Array();
  6218. RunTime.bLocked = true;
  6219. RunTime.kvPrex = "";
  6220. RunTime.key = "";
  6221. Zoom.imgSrc = "";
  6222. Zoom.pageNum = "";
  6223. Zoom.bookId = "";
  6224. Zoom.analyticsUA = "";
  6225. Zoom.bookTitle = "";
  6226. Zoom.bbv = "";
  6227. Zoom.pcode = "";
  6228. Zoom.hotlinks = [];
  6229. Zoom.videos = [];
  6230. Zoom.buttons = [];
  6231. Zoom.xOffset = 0;
  6232. Zoom.yOffset = 0;
  6233. Zoom.popupXOffset = 0;
  6234. Zoom.popupYOffset = 0;
  6235. Main.main();
  6236.